笔试真题:20230715-oppo提前批

来源:模拟笔试 - 卡码网周赛第十六期(23年oppo提前批笔试真题)

构造二阶行列式

111. 构造二阶行列式

本题较为简单,可以不用练习。

分析
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package main
import "fmt"
func main() {
	var x int
	_, err := fmt.Scanln(&x)
	if err != nil {
		return
	}
	r := construct(x)
	if r == [2][2]int{} {
		fmt.Println(-1)
		return
	}
	fmt.Printf("%d %d\n%d %d", r[0][0], r[0][1], r[1][0], r[1][1])
}
func construct(x int) [2][2]int {
	//先确定a和b的乘积(prod),然后判断prod能否拆解为两个数(c d)的乘积,如果能,则返回a、b、c、d。
	//如果不能,则增加a和b的值
	for i := x; i <= 400; i++ {
		check1, a, b := canDisassemble(i)
		check2, c, d := canDisassemble(i - x)
		if check1 && check2 {
			return [2][2]int{{a, c}, {d, b}}
		}
	}
	return [2][2]int{}
}
func canDisassemble(a int) (bool, int, int) {
	for i := 1; i*i <= a; i++ {
		for j := 1; j <= a; j++ {
			if i*j > a {
				break
			}
			if i*j == a {
				return true, i, j
			}
		}
	}
	return false, 0, 0
}

挑战boss

112. 挑战boss

本题较为简单,可以不用练习。

分析
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main
import "fmt"
func main() {
	var n, a, b int
	var s string
	fmt.Scanln(&n, &a, &b)
	fmt.Scanln(&s)
	r := getDamage(n, a, b, s)
	fmt.Println(r)
}
func getDamage(n, a, b int, s string) int {
	damage := 0
	k := 0
	for i := 0; i < n; i++ {
		damage += a + k*b
		if s[i] == 'o' {
			k++
		} else {
			k = 0
		}
	}
	return damage
}

国际象棋

113. 国际象棋

分析
0%