//第三屆藍橋杯軟件類省賽真題-C-A-4_奇怪的比賽/* 某電視臺舉辦了低碳生活大獎賽。題目的計分規則相當奇怪: 每位選手需要回答10個問題(其編號為1到10),越后面越有難度。答對的,當前分數翻倍; 答錯了則扣掉與題號相同的分數(選手必須回答問題,不回答按錯誤處理)。 每位選手都有一個起步的分數為10分。 某獲勝選手最終得分剛好是100分,如果不讓你看比賽過程,你能推斷出他(她)哪個題目答對了,哪個題目答錯了嗎? 如果把答對的記為1,答錯的記為0,則10個題目的回答情況可以用僅含有1和0的串來表示。 例如:0010110011 就是可能的情況。 你的任務是算出所有可能情況。每個答案占一行。 答案寫在“解答.txt”中,不要寫在這里!*//*【解題思路】解法:深度優先搜索或暴力枚舉 答案:0010110011001011001101110100000111010000*/#include<iostream>#include<cstring>using namespace std;int a[11];//此數組用于表示10個問題的對與錯,值為1表示答對,值為0表示答錯int score;//表示得分成績 /* * @簡介:深度優先搜索算法 * @參數:n表示第n道題,value表示答對與答錯的情況 * @返回:無 */ void dfs(int n,int value){ if(n == 11) { //計算最終得分,如果最終得分滿足題目100分的條件則輸出 score = 10; for(int i=1;i<=10;i++) { if(a[i] == 1) score *= 2; else score -= i; } if(score == 100) { for(int i=1;i<=10;i++) cout<<a[i]; cout<<endl; } return; } a[n] = value;//將當前答對、答錯的情況賦給當前數組a值 dfs(n+1,0); dfs(n+1,1); return;}int main(){ memset(a,0,sizeof(a)); dfs(1,0); return 0;}
新聞熱點
疑難解答