時間限制: 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。資...