ブルーブリッジ杯第3回C/C++予選本題(4)変な試合(再帰)
7456 ワード
あるテレビ局は低炭素生活グランプリを開催した.問題の採点ルールはかなりおかしいです.
各選手は10個の質問(その番号は1から10)に答えなければならないが、後ろほど難しい.正解は、現在の点数が2倍になった.答えを間違えると問題番号と同じ点数を差し引く(選手は質問に答えなければならず、答えないのは間違いで処理する).
各選手にはスタートの点数が10点ある.
ある優勝選手の最終得点はちょうど100点で、試合の過程を見せなければ、彼(彼女)のどの問題が正しいのか、どの問題が間違っているのか推測できますか.
正解を1,正解を0とすると,10問の回答状況は1と0のみの列で表すことができる.たとえば、0010110011が可能です.
あなたの任務はすべての可能性を算出することです.答えごとに1行を占める.
答えは「解答.txt」に書いてあります.ここに書かないでください.
再帰.
各層の再帰は1つの問題の誤りを表し、前のすべての問題の誤りを1つの配列で格納する再帰を書きます.n=10になるまで、現在の成績が現在の問題が間違っている場合の得点が100であるかどうかを計算します.100出力の場合.
答え:
コード:
Freecode : www.cnblogs.com/yym2013
各選手は10個の質問(その番号は1から10)に答えなければならないが、後ろほど難しい.正解は、現在の点数が2倍になった.答えを間違えると問題番号と同じ点数を差し引く(選手は質問に答えなければならず、答えないのは間違いで処理する).
各選手にはスタートの点数が10点ある.
ある優勝選手の最終得点はちょうど100点で、試合の過程を見せなければ、彼(彼女)のどの問題が正しいのか、どの問題が間違っているのか推測できますか.
正解を1,正解を0とすると,10問の回答状況は1と0のみの列で表すことができる.たとえば、0010110011が可能です.
あなたの任務はすべての可能性を算出することです.答えごとに1行を占める.
答えは「解答.txt」に書いてあります.ここに書かないでください.
再帰.
各層の再帰は1つの問題の誤りを表し、前のすべての問題の誤りを1つの配列で格納する再帰を書きます.n=10になるまで、現在の成績が現在の問題が間違っている場合の得点が100であるかどうかを計算します.100出力の場合.
答え:
0010110011
0111010000
1011010000
コード:
1 #include <iostream>
2 using namespace std; 3 int a[11]; 4 void f(int n,int r,int s) // ( )
5 { 6 if(r){ //
7 if(n==10 && s*2==100){ 8 a[n]=r; 9 for(int i=1;i<=10;i++) 10 cout<<a[i]; 11 cout<<endl; 12 return ; 13 } 14 else if(n==10 && s*2!=100) 15 return ; 16 else { 17 a[n]=r; 18 f(n+1,0,s*2); 19 f(n+1,1,s*2); 20 } 21 } 22 else{ 23 if(n==10 && s-n==100){ 24 a[n]=r; 25 for(int i=1;i<=10;i++) 26 cout<<a[i]; 27 cout<<endl; 28 return ; 29 } 30 else if(n==10 && s-n!=100) 31 return ; 32 else{ 33 a[n]=r; 34 f(n+1,0,s-n); 35 f(n+1,1,s-n); 36 } 37 } 38 } 39 int main() 40 { 41 f(1,0,10); 42 f(1,1,10); 43 return 0; 44 }
Freecode : www.cnblogs.com/yym2013