藍橋杯 歷屆試題 數字遊戲

2022-05-06 02:39:11 字數 1343 閱讀 2985

時間限制: 1sec 記憶體限制: 128mb 提交: 612 解決: 78

題目描述

棟棟正在和同學們玩乙個數字遊戲。 

遊戲的規則是這樣的:棟棟和同學們一共n個人圍坐在一圈。棟棟首先說出數字1。接下來,坐在棟棟左手邊的同學要說下乙個數字2。再下面的乙個同學要從上乙個同學說的數字往下數兩個數說出來,也就是說4。下乙個同學要往下數三個數,說7。依次類推。 

為了使數字不至於太大,棟棟和同學們約定,當在心中數到  k-1  時,下乙個數字從0開始數。例如,當k=13時,棟棟和同學們報出的前幾個數依次為: 

1,  2,  4,  7,  11,  3,  9,  3,  11,  7。 

遊戲進行了一會兒,棟棟想知道,到目前為止,他所有說出的數字的總和是多少。 

樣例說明 

棟棟說出的數依次為1,  7,  9,和為17。 

資料規模和約定 

1  <   n,k,t  <   1,000,000; 

輸入輸入的第一行包含三個整數  n,k,t,其中  n  和  k  的意義如上面所述,t  表示到目前為止棟棟一共說出的數字個數。 

輸出輸出一行,包含乙個整數,表示棟棟說出所有數的和。 

樣例輸入

3  13  3

樣例輸出

17
解題思路:

1.首先是明確只能計算主角的數,如果計算了別人的數,那麼時間就會超限。

2.第一次主角的數是1,那麼sum=1,經過n次計數得到的數是主角的第二個數,再次經過n次計數得到的是主角的第三個數。第二個同學首先是+1然後得到自己的數,第三個同學首先是+2,然後得到自己的數,第n個同學首先是+(n-1)然後得到自己的數,然後輪到主角+n得到自己的數。這裡相當於主角的數進行+1+2+...+n然後得到了自己的第二個數,然後再次輪到第二個同學+(n+1)得到自己的數,第三個同學+(n+2)得到了自己的數...相當與只要只要知道第二個同學的數a,假設主角上一次的數是cnt,那麼下一次數就是(a+a+n-1)*n/2+cnt,然後就是%k就可以了。

/*

#includeint main(void)

count++;

pre=data;

} printf("%lld",sum);

return 0;}*/

#include

int main(void

) printf(

"%lld

",sum);

return0;

}

注意事項:

1.使用long long進行資料的儲存,防止溢位。

2.使用long long資料型別的時候,輸出使用%lld,防止誤寫成%d.

藍橋杯 歷屆試題 數字遊戲

這道題給了乙個很明顯的乙個序列,那麼就是數列可以一次寫為 1 0 1 0 1 1 0 1 2 1 0 1 2 3 1 0 1 2 n 1 這樣就轉化為1加上乙個等差數列,那麼直接按照等差數列求和公式sn a1 an n 2 這樣就很容易求出答案。但是中間用公式的時候會用到i n i n 1 注意i和...

藍橋杯 歷屆試題 數字遊戲

先看到資料規模,如果純暴力的話10 6 10 6肯定是要超時的,所以我們要想辦法優化,因為我們只關心棟棟報出的數字總和,我們又知道了其他人報的規律是前面乙個人的 1 2 3 4這樣報的,那麼換句話來說,我們只要知道每迴圈一組總共加了多少,把這些總和加起來加到棟棟上次報的數字上,就能知道棟棟這次報的數...

1443 藍橋杯 歷屆試題 數字遊戲

為了使數字不至於太大,當在心中數到 k 1 時,下乙個數字從0開始數。ps 相當於取模 例如,當k 13時,棟棟和同學們報出的前幾個數依次為 1,2,4,7,11,3,9,3,11,7。遊戲進行了一會兒,棟棟想知道,到目前為止,他所有說出的數字的總和是多少。棟棟說出的數依次為1,7,9,和為17。資...