time limit: 1 sec memory limit: 128 mb
submit: 14 solved: 9 [
submit][
status][
web board]
某電視台舉辦了低碳生活大獎賽。題目的計分規則相當奇怪:
每位選手需要回答
10個問題(其編號為1到
10),越後面越有難度。答對的,當前分數翻倍;答錯了則扣掉與題號相同的分數(選手必須回答問題,不回答按錯誤處理)。
每位選手都有乙個起步的分數為
10分。
某獲勝選手最終得分剛好是
100分,如果不讓你看比賽過程,你能推斷出他(她)哪個題目答對了,哪個題目答錯了嗎?
如果把答對的記為
1,答錯的記為0,則
10個題目的回答情況可以用僅含有1和
0的串來表示。例如:
0010110011
就是可能的情況。
你的任務是算出所有可能情況。每個答案佔一行。(將每乙個答案看成二進位制數,答案由大到小排列) 無
0010110011
曹令鑫注:
採用遞迴的做法。
分數是從10開始的,每一道題目我們並不知道哪一道做的對或者錯,所以我把每一道題目都置為錯誤的(grades[10]陣列的初值均為0),text函式為遞迴函式(傳的值分別為分數和grades陣列的下標),grades陣列中每一道題目又兩種情況(對或者錯),對的話,陣列中的值就改為1,對應的分數就做加倍操作,陣列下標加1(vis同時也代表當前是第幾道題目);錯誤,就把當前陣列中的值,置為0,把當前分數減去當前題目數(扣掉與題號相同的分數),題目數繼續加1.
函式上方的if語句是遞迴出口,當成績不滿足條件或者題目數超過10個時,就繼續進行下面的if語句判斷(判斷當前分數是否為100,如果為100,就把grades陣列中的一串數字輸出),否則就return 0 退出函式。
最後結果為:
1011010000
0111010000
0010110011
#include#include#includeusing namespace std;
int grades[10]=;
void text(int score,int vis){
int i;
if(score<=0||vis>=11){//遞迴出口
if(score==100){//滿足成績為100,就輸出
for(i=1;i<=10;i++){
cout<
奇怪的比賽
某電視台舉辦了低碳生活大獎賽。題目的計分規則相當奇怪 每位選手需要回答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分,如果不讓你看比賽過程,你能...