C语言编程——奇怪的比赛
2013-11-03 22:20
567 查看
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:
每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;
答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。
你的任务是算出所有可能情况。每个答案占一行。
方法1:
方法2:
每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;
答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。
你的任务是算出所有可能情况。每个答案占一行。
方法1:
#include <cstdio> int main() { int score, temp; int i, k; char s[11] = {0}; for(i=0; i<=1023; i++) //共有2的10次方(即1024)种可能 { score = 10; temp = i; for(k=1; k<=10; k++) { if(1 == (temp & 1)) { s[k-1] = '1'; score *= 2; } else { s[k-1] = '0'; score -= k; } temp >>= 1; } if(100 == score) { puts(s); } } return 0; }
方法2:
#include<cstdio> #include<cstring> void work(int cur,int score,char *s){ if(cur==10){ if(score==100)puts(s); return; } s[cur]='1'; work(cur+1,score+score,s); s[cur]='0'; work(cur+1,score-cur-1,s); } int main(){ char s[12]={0}; work(0,10,s); }
相关文章推荐
- 一道C语言编程比赛题(时钟追赶问题)
- 奇怪的C语言——C51编程C语言注意事项
- 嵌入式C语言编程与AVR技巧(一)——C语言环境访问MCU寄存器
- 基于C语言的多线程编程 线程同步
- C语言编程中的问题
- C语言编程小练习2
- 每个程序员在他们的编程生涯中都应该学习C语言
- 回顾大一·C语言编程1.2
- c语言环境初始化&c语言和汇编混合编程
- 在C语言编程中常遇到的几个问题
- 求100——200间的全部素数!C语言编程!
- c语言socket编程指南
- C语言编程中分配内存空间的相关函数
- Linux管道通信C语言编程示例
- 用C语言编程16点阵字库
- C语言编程特殊错误记录
- 2012华为编程比赛之字符串数字字符排序
- C语言编程规范1: 注释
- HTTP协议的C语言编程实现实例
- spring aop编程与ssh集成的奇怪异常问题解决办法