蓝桥杯-奇怪的比赛
突然想到这题,觉得挺悲剧的。当时还以为要用回溯去做,- -!,其实无语了,超简单!
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 // 某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪: 2 // 3 // 每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。 4 // 5 // 每位选手都有一个起步的分数为10分。 6 // 7 // 某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗? 8 // 9 // 如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。 10 // 11 // 你的任务是算出所有可能情况。每个答案占一行。 12 13 // 答案写在“解答.txt”中,不要写在这里! 14 15 16 #include <stdio.h> 17 #include <stdlib.h> 18 #include <string.h> 19 void solve(char binary[]) 20 { 21 int score=10; 22 int len=strlen(binary); 23 if(len<10) 24 { 25 for(int i=1;i<=10-len;i++) 26 { 27 score-=i; 28 } 29 } 30 for(int j=10-len;j<10;j++) 31 { 32 if(binary[j]=='0') 33 { 34 score-=j+1; 35 } 36 else 37 { 38 score*=2; 39 } 40 } 41 if(score==100) 42 { 43 for(int i=0;i<10-len;i++) 44 { 45 printf("0"); 46 } 47 printf("%s\n",binary); 48 } 49 } 50 void main() 51 { 52 char binary[10]; 53 for(int i=0;i<1024;i++) 54 { 55 itoa(i,binary,2); 56 solve(binary); 57 } 58 }