低碳生活答题问题
问题描述
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:
1、每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
2、每位选手都有一个起步的分数为10分。 某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
3、如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。
4、你的任务是算出所有可能情况。每个答案占一行。
解题思路
一共十个问题,每个问题两种情况,要么对要么错,那么结果就会有 0000000000 ~ 1111111111 = pow(2,10)种,就可以用暴力搜索将所有情况枚举出来然后判断符合要求的情况;
分数的控制可以直接利用遍历所有情况的 for 循环分别判断两种情况;
如果用输出 1 代表回答正确, 0 代表错误,不难想到任何一个正整数对 2 取余结果只有 1 和 0 两种情况, 输出的时候也就成了进制转换问题;
代码实现
#include <stdio.h>
#include <math.h>
int main() {
int i,j;
int score,temp;
for(i=0;i<pow(2,10);i++){
temp=i;
score=10;
for(j=0;j<10;j++){
if(temp%2 == 1)
score*=2;
else
score-=j+1;
temp/=2;
}
if(score==100){
temp=i;
for(j=0;j<10;j++){
printf("%d ", temp%2);
temp/=2;
}
printf("\n");
}
}
return 0;
}
运行结果
1 0 1 1 0 1 0 0 0 0
0 1 1 1 0 1 0 0 0 0
0 0 1 0 1 1 0 0 1 1
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 套陆的博客!
评论
TwikooUtterances