//第三屆藍橋杯軟件類省賽真題-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;}
新聞熱點
疑難解答