zoukankan      html  css  js  c++  java
  • 第二届蓝桥杯省赛---奇怪的比赛

    奇怪的比赛

    1. 某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:
      每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。
      每位选手都有一个起步的分数为10分。
      某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?
      如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。
      你的任务是算出所有可能情况。每个答案占一行。
      答案写在“解答.txt”中,不要写在这里!

    分析:

    方法一:直接暴力即可,十层for循环,按照规则进行相应的运算。。。

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int mark;
     6     int a[10];
     7     for(a[1]=0; a[1]<=1; a[1]++)
     8         for(a[2]=0; a[2]<=1; a[2]++)
     9             for(a[3]=0; a[3]<=1; a[3]++)
    10                 for(a[4]=0; a[4]<=1; a[4]++)
    11                     for(a[5]=0; a[5]<=1; a[5]++)
    12                         for(a[6]=0; a[6]<=1; a[6]++)
    13                             for(a[7]=0; a[7]<=1; a[7]++)
    14                                 for(a[8]=0; a[8]<=1; a[8]++)
    15                                     for(a[9]=0; a[9]<=1; a[9]++)
    16                                         for(a[10]=0; a[10]<=1; a[10]++)
    17                                         {
    18                                             mark=10;
    19                                             for(int i=1; i<=10; i++)
    20                                             {
    21                                                 if(a[i]==0)
    22                                                     mark-=i;
    23                                                 else
    24                                                     mark*=2;
    25                                             }
    26                                             if(mark==100)
    27                                             {
    28                                                 for(int i=1; i<=10; i++)
    29                                                     cout<<a[i];
    30                                                 cout<<endl;
    31                                             }
    32                                         }
    33     return 0;
    34 }

    方法二:深搜每种状态,每种问题有两种情况,(1正确,0错误),时间度咋读是2^10......

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<algorithm>
     5 using namespace std;
     6 const int maxn = 15;
     7 
     8 void dfs(int k, int score,int a[] ){
     9     if(k==11){/*符合要求的话*/
    10         if(score==100){
    11             /*这里不能写成if(k==11&&score==100),想一想为什么???*/
    12             for( int i=1; i<=10; i++ ){
    13                 cout<<a[i];
    14             }
    15             cout<<endl;
    16         }
    17         return ;
    18     }
    19     a[k]=1;
    20     dfs(k+1,abs(score)*2,a);
    21 
    22     a[k]=0;
    23     dfs(k+1,score-k,a);
    24     /*a[k]=0;*/
    25 
    26 }
    27 
    28 int main(){
    29     int a[maxn];
    30     /*for( int i=1; i<=10; i++ ){
    31         a[i]=0;
    32     }*/
    33     memset(a,0,sizeof(a));
    34     dfs(1,10,a);/*第一个参数代表第几个问题,第二个参数代表现在的得分*/
    35     return 0;
    36 }
    有些目标看似很遥远,但只要付出足够多的努力,这一切总有可能实现!
  • 相关阅读:
    John Resig 见面会视频
    《程序员羊皮卷》书评
    用 JavaScript 对 JSON 进行模式匹配 (Part 2 实现)
    工具:开发者使用,企业埋单
    「云端 JavaScript 漫游指南」
    如何让你的网站支持 IE9 Pinned Site (Part 1 理论)
    世界顶级黑客自传:Ghost in the Wires
    MVP Summit 2010 Trip (WA)
    Apple 谈论产品 vs Microsoft 谈论技术
    IBatisNet开发使用小结 之二
  • 原文地址:https://www.cnblogs.com/Bravewtz/p/10421183.html
Copyright © 2011-2022 走看看