来源:模拟笔试 - 卡码网周赛第十六期(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. 国际象棋