一个关于答题算分的题

40   /   0   /   0   /   0   /   发布于 1年前
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答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 条回复
  • 需要登录 后方可回复, 如果你还没有账号请点击这里注册
梦初醒 茅塞开
  • 不经他人苦,莫劝他人善。
  • 能量足,心态稳,温和坚定可以忍。
  • 辛苦决定不了收入,真正决定收入的只有一个,就是不可替代性。
  • 要么忙于生存,要么赶紧去死!
  • 内心强大到混蛋,比什么都好!
  • 规范流程比制定制度更重要!
  • 立志需要高远,但不能急功近利;
    行动需要迅速,却不可贪图速成。
  • 不要强求人品,要设计高效的机制。
  • 你弱的时候,身边都是鸡零狗碎;
    你强的时候,身边都是风和日丽。
  • 机制比人品更可靠,契约比感情更可靠。
  • 合作不意味着没有冲突,却是控制冲突的最好方法。
  • 误解是人生常态,理解本是稀缺的例外。
  • 成功和不成功之间,只差一次坚持!
  • 祁连卧北雪,大漠壮雄关。
  • 利益顺序,过程公开,机会均等,付出回报。