题目描述
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:
每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。
你的任务是算出所有可能情况,并输出所有可能的01序列(包括已给出的0010110011),每个答案占一行。
输入
没有输入。
输出
若干行01序列,若把每一行序列作为一个二进制数对待,则各行按照从小到大排列。
即:上一行序列的值应小于下一行的值。
思路
本题很显然用递归的方法比较简单可行,没有什么特别的地方,注意递归的出口别判断错就行,运行出结果以后注意多检查。
代码呈上:
#include <stdio.h>
void f(int *a,int n,int sum)
{
int i;
if(n>10)
{
if(sum==100)
{
for(i=1; i<11; i++)
printf("%d",a[i]);
printf("\n");
}
return ;
}
a[n]=0;
f(a,n+1,sum-n);
a[n]=1;
f(a,n+1,sum*2);
}
int main ()
{
int a[11];
f(a,1,10);
return 0;
}
运行示例
有更好地方法欢迎评论或私信进行交流哦!学习ing!