第四题
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:
每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
每位选手都有一个起步的分数为10分。
某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。
你的任务是算出所有可能情况。每个答案占一行。
答案写在“解答.txt”中,不要写在这里!
思路:深搜 暴力求解 都可以
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int sum=10;
int num[11];//放结果
void dfs(int n,int sum)
{
int t=sum;//用来记录sum当前的值 因为后面会发生修改
if(n==11)//n==11说明前面所有都已经赋值完毕 作为结束条件
{
if(sum==100)//如果是100说明满足条件 输出
{
for(int i=1;i<11;i++)
cout<<num[i];
cout<<endl;
}
return;
}
num[n]=1;//此时该序号为1表示答对
sum=2*t;//总分翻倍
dfs(n+1,sum);//继续递归
num[n]=0;//没答对
sum=t-n;//减去当前序号数字
dfs(n+1,sum);//继续递归
}
int main()
{
memset(num,0,sizeof(num));
dfs(1,sum);
}