奇怪的比賽
這是2012
年藍橋杯全國軟體大賽預賽(
c++本科組)的第
4題,情景是乙個計分規則奇怪的比賽,問題是已知總分得到每題的回答情況。
某電視台舉辦了低碳生活大獎賽。題目的計分規則相當奇怪:
每位選手需要回答
10個問題(其編號為1到
10),越後面越有難度。答對的,當前分數翻倍;答錯了則扣掉與題號相同的分數(選手必須回答問題,不回答按錯誤處理)。
每位選手都有乙個起步的分數為
10分。
某獲勝選手最終得分剛好是
100分,如果不讓你看比賽過程,你能推斷出他(她)哪個題目答對了,哪個題目答錯了嗎?
如果把答對的記為
1,答錯的記為0,則
10個題目的回答情況可以用僅含有1和
0的串來表示。例如:
0010110011
就是可能的情況。
你的任務是算出所有可能情況。每個答案佔一行。
答案寫在「解答
.txt」
中,不要寫在這裡!
解法一:遞迴
#include
#include
using namespace std;
int a[11];
void dfs(int i,int sum)
return ; }
a[i]=0;
dfs(i+1,sum-i);
a[i]=1;
dfs(i+1,sum*2);
} int main()
解法二:遞迴
#include
using namespace std;
bool b[11];
void f(int n)
if(sum==100)
return; }
b[n]=0;//假設該題答錯
f(n+1); //繼續答後續題目
b[n]=1;//假設該題答錯
f(n+1); //繼續答後續題目 }
int main()
解法三:
列舉0到1023
#include
#include
#include
int a[10];
void find(int x)
} int main()
if(n==100)
find(i++); }
}
奇怪的比賽
某電視台舉辦了低碳生活大獎賽。題目的計分規則相當奇怪 每位選手需要回答10個問題 其編號為1到10 越後面越有難度。答對的,當前分數翻倍 答錯了則扣掉與題號相同的分數 選手必須回答問題,不回答按錯誤處理 每位選手都有乙個起步的分數為10分。某獲勝選手最終得分剛好是100分,如果不讓你看比賽過程,你能...
奇怪的比賽
include include include include include includeusing namespace std const int target 100 int globalcnt 0 int cnt 11 int next int id,int cur 開始答第id道題 in...
奇怪的比賽
某電視台舉辦了低碳生活大獎賽。題目的計分規則相當奇怪 每位選手需要回答10個問題 其編號為1到10 越後面越有難度。答對的,當前分數翻倍 答錯了則扣掉與題號相同的分數 選手必須回答問題,不回答按錯誤處理 每位選手都有乙個起步的分數為10分。某獲勝選手最終得分剛好是100分,如果不讓你看比賽過程,你能...