• 蓝桥杯-奇怪的比赛


    奇怪的比赛

        某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:

        每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。

        每位选手都有一个起步的分数为10分。

        某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?

        如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。

        你的任务是算出所有可能情况。每个答案占一行。

       看似简单,其实10层循环写起来麻烦的一个题……

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

     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("
    ");
    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 }
  • 相关阅读:
    【转】2008年中国.NET技术应用趋势分析
    VB计算器(给上学需要应付作业的应个急)
    创业失败的18个原因
    使用ChilkatDotNet组件构建网络爬虫程序
    使用文本编辑器开发和部署一个ASP.NET Web应用程序
    优化 SQL Server 查询性能
    【转】sql性能优化方法
    使用 SOS 对 Linux 中运行的 .NET Core 进行问题诊断
    MultiThread Of Member Functions
    汇编 中断调用表 (中断向量表)
  • 原文地址:https://www.cnblogs.com/youdiankun/p/3594967.html
Copyright © 2020-2023  润新知