I、題し
テレビ局は、低炭素生活グランプリを開催しました。得点はかなり奇妙なトピックをルール:
各プレイヤーは、より多くの背後に多くの困難、(1-10から番号)10個の質問に答える必要があります。答えは、現在のスコアが倍;(プレイヤーはエラー処理で答えていない質問に答える必要があります)同じ質問番号マイナス画分に答えることができませんでした。
各競技者は、10点の開始スコアを持っていました。
勝利プレーヤーの最終的なスコアは、あなたがレースを見てみましょうでない場合、あなたは彼(彼女)は、被験者はそれ間違ったトピックを持っている、正しく答えであることを推測することができ、わずか100ポイントでしょうか?
回答が1で示されている場合、0間違った答えとして、答えは0と1が示されている唯一のトピック文字列を含むケース10とすることができると呼ばれます。たとえば:0010110011が可能です。
あなたの仕事は、すべての可能な場合を計算することです。行ごとの各回答。
ここに書いてはいけませんあなたの答え「.txtの答えを」書きます!
第二に、アイデア
各トピックの後にストレージアレイは右または間違った答え、エラーの0、1つの代表的なものであると
ケース10個の後に直接回答の質問は、ジ及び100ポイント、及び出力アレイを含みます。
番号が現在のタイトル数を減算間違っている場合は、スコアが2倍になる場合、次の再帰DFS。
なお!!その工程は、算出DFSの前にステップダウンレコードスコアに配置しなければなりません。
第三に、問題解決
#include <iostream> using namespace std; int each_score[10]={0};//用来记录答完每个问题是对是错 void dfs(int n,int score)//n是第n个问题开始,score是默认分数 { if(n==11)//已经第10题之后 { if(score==100)//如果已经得到100分 { for(int i=1;i<11;i++) { cout << each_score[i] ; } cout << endl ; return ; } else { return; } } each_score[n]=0;//答错的情况 dfs(n+1,score-n); each_score[n]=1; dfs(n+1,score*2); } int main() { dfs(1,10); return 0; }
第四に、結果
0010110011
0111010000
1011010000プロセスは、終了コードを終了0
0010110011のタイトルに加えて、答えは:0111010000と1011010000