ブルーブリッジカップ - 2012 C ++ Aグループ質問4:奇妙なゲーム[DFS]

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

公開された57元の記事 ウォンの賞賛9 ビュー3566

おすすめ

転載: blog.csdn.net/Jayphone17/article/details/104279218