3241 奇怪的比賽

2021-08-15 02:07:15 字數 1353 閱讀 3476

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分,如果不讓你看比賽過程,你能...