【問題描述】
某機構舉辦球票大獎賽。獲獎選手有機會贏得若干張球票。
主持人拿出 n 張卡片(上面寫著 1~n 的數字),打亂順序,排成乙個圓圈。
你可以從任意一張卡片開始順時針數數: 1,2,3.....
如果數到的數字剛好和卡片上的數字相同,則把該卡片收入囊中,從下乙個卡片重新數數。
直到再無法收穫任何卡片,遊戲結束。囊中卡片數字的和就是贏得球票的張數。
比如:卡片排列是:1 2 3
我們從1號卡開始數,就把1號卡拿走。再從2號卡開始,但數的數字無法與卡片對上,
很快數字越來越大,不可能再拿走卡片了。因此這次我們只贏得了1張球票。
還不算太壞!如果我們開始就傻傻地從2或3號卡片數起,那就一張卡片都拿不到了。
如果運氣好,卡片排列是 2 1 3
那我們可以順利拿到所有的卡片!
本題的目標就是:已知順時針卡片序列。
隨便你從**開始數,求最多能贏多少張球票(就是收入囊中的卡片數字之和)
輸入資料:
第一行乙個整數n(n<100),表示卡片數目
第二行 n 個整數,表示順時針排列的卡片
輸出資料:
一行,乙個整數,表示最好情況下能贏得多少張球票
樣例輸入:
31 2 3
樣例輸出:
1樣例輸入:
32 1 3
樣例輸出:
6
使用佇列,列舉每種情況,每種遍歷時 ,符合的直接pop(),不符合的先pop(),再push();當 標識大於輸入的元素個數時 ,return;
初次**:wrong
//#include#include//#includeusing namespace std;
queuea;
int n;
int f(int i)
int max=0;
for(int i=1; i<=n; i++)
int max=0;
for(int i=1; i<=n; i++)
{int num=f(i,a);
// cout<<" "max=num;
// cout《測試:
贏球票 題目
贏球票 某機構舉辦球票大獎賽。獲獎選手有機會贏得若干張球票。主持人拿出 n 張卡片 上面寫著 1 n 的數字 打亂順序,排成乙個圓圈。你可以從任意一張卡片開始順時針數數 1,2,3 如果數到的數字剛好和卡片上的數字相同,則把該卡片收入囊中,從下乙個卡片重新數數。直到再無法收穫任何卡片,遊戲結束。囊中...
藍橋杯歷屆試題 贏球票(模擬)
某機構舉辦球票大獎賽。獲獎選手有機會贏得若干張球票。主持人拿出 n 張卡片 上面寫著 1 n 的數字 打亂順序,排成乙個圓圈。你可以從任意一張卡片開始順時針數數 1,2,3 如果數到的數字剛好和卡片上的數字相同,則把該卡片收入囊中,從下乙個卡片重新數數。直到再無法收穫任何卡片,遊戲結束。囊中卡片數字...
第七屆藍橋杯(國賽) 贏球票
問題描述 某機構舉辦球票大獎賽。獲獎選手有機會贏得若干張球票。主持人拿出 n 張卡片 上面寫著 1 n 的數字 打亂順序,排成乙個圓圈。你可以從任意一張卡片開始順時針數數 1,2,3 如果數到的數字剛好和卡片上的數字相同,則把該卡片收入囊中,從下乙個卡片重新數數。直到再無法收穫任何卡片,遊戲結束。囊...