一个关于答题算分的题
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,总分增加与题号相同的分数;答错了则扣掉与题号相同的分数,总分小于等于0时则结束挑战,(选手必须回答问题,不回答按错误处理)。每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是S分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1,答错的记为0。例如:0010110011就是可能的情况。
给出一个分数,你的任务是算出所有可能情况的种数。
**有个重点,二维数组在添加数据要考虑数组共享内存的问题,另有一个日志说明这个问题。**
```golang
package main
import (
"fmt"
"os"
"strconv"
)
func main() {
a := make([][]int, 0, 1024)
fengshu := make([]int, 0, 10)
chengji(fengshu, 10, &a)
for i := 0; i < 1024; i++ {
x := 10
for j, v := range a[i] {
if v == 1 {
x = x + j + 1
} else {
x = x - j -1
}
if x <= 0 {
x = -1
break
}
}
a[i] = append(a[i], x)
}
if len(os.Args) == 2 {
num, err := strconv.Atoi(os.Args[1])
if err != nil {
fmt.Printf("转换出错: %v\n", err)
return
}
if num < 0 || num > 65 {
fmt.Println("请输入0-65的数字。")
} else {
for _, v := range a {
s := ""
if v[10] == num {
for i := 0; i < 10; i++ {
if v[i] == 1 {
s = s + "对"
}
if v[i] == 0 {
s = s + "错"
}
}
fmt.Println(s, "的最后得分为", os.Args[1])
}
}
}
} else {
fmt.Println("请输入一个参数!")
return
}
}
func chengji(fengshu []int, n int, a *[][]int) {
if len(fengshu) == n {
// fmt.Println(fengshu)
*a = append(*a, append([]int(nil), fengshu...))
return
}
// 在当前组合末尾添加 0 并递归
chengji(append(fengshu, 0), n, a)
// 在当前组合末尾添加 1 并递归
chengji(append(fengshu, 1), n, a)
}
func sum(numbers []int) int {
sum := 0
for _, number := range numbers {
sum += number
}
return sum
}
```
- 共 0 条回复
- 需要登录 后方可回复, 如果你还没有账号请点击这里注册。
wiseAI
✨ 梦初醒 茅塞开
- 不经他人苦,莫劝他人善。
- 能量足,心态稳,温和坚定可以忍。
- 辛苦决定不了收入,真正决定收入的只有一个,就是不可替代性。
- 要么忙于生存,要么赶紧去死!
- 内心强大到混蛋,比什么都好!
- 规范流程比制定制度更重要!
-
立志需要高远,但不能急功近利;
行动需要迅速,却不可贪图速成。 - 不要强求人品,要设计高效的机制。
-
你弱的时候,身边都是鸡零狗碎;
你强的时候,身边都是风和日丽。 - 机制比人品更可靠,契约比感情更可靠。
- 合作不意味着没有冲突,却是控制冲突的最好方法。
- 误解是人生常态,理解本是稀缺的例外。
- 成功和不成功之间,只差一次坚持!
- 祁连卧北雪,大漠壮雄关。
- 利益顺序,过程公开,机会均等,付出回报。
