首页 > 其他 > 详细

蓝桥杯-奇怪的比赛

时间:2014-03-11 23:24:13      阅读:474      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
  
  某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪: 每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。 每位选手都有一个起步的分数为10分。 某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗? 如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:
0010110011 就是可能的情况。 你的任务是算出所有可能情况。每个答案占一行。
bubuko.com,布布扣

看似简单,但实现起来很麻烦的一个题。可以用十层循环。

所以这题就体现出了递归的妙处。

bubuko.com,布布扣
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<stdlib.h>
 4 
 5 int score(int *a)//把复杂问题用一个个函数分解的如此简单
 6 {
 7     int i,s=10;
 8     for(i=1;i<=10;i++)
 9     {
10         if(a[i])
11         {
12             s*=2;
13         }
14         else
15         {
16             s-=i;
17         }
18     }
19     if(s==100)//最终得分是100
20         return 1;
21     else
22         return 0;
23 }
24 
25 void show(int *a)//条理清晰
26 {
27     int i;
28     for(i=1;i<=10;i++)
29     {
30         printf("%d",a[i]);
31     }
32     printf("\n");
33 }
34 
35 void sovle(int *a,int n)//递归的妙用
36 {
37     if(n>10)//如果10道题回答完毕
38     {
39         if(score(a))//判断其得分是不是100
40         {
41             show(a);
42         }
43         return;//只要回答完10道题在这都要return,因为sovle函数是一个递归函数
44     }
45     a[n]=1;//第一题回答正确
46     sovle(a,n+1);//递归进入第二题
47     a[n]=0;//返回后再看第一题错误的情况
48     sovle(a,n+1);//在进行递归
49 }
50 
51 int main()
52 {
53     int a[11];
54     memset(a,0,sizeof(a));
55     sovle(a,1);//从第一题开始
56     system("pause");
57     return 0;
58 }
bubuko.com,布布扣

蓝桥杯-奇怪的比赛,布布扣,bubuko.com

蓝桥杯-奇怪的比赛

原文:http://www.cnblogs.com/youdiankun/p/3594967.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!