【ZCMU2096】數字遊戲(數學題)

題目鏈接

不忘初心,砥礪前行!慶祝中華人民共和國建國六十九週年!祝祖國繁榮昌盛,祝全國人民幸福安康!

Problem 2096. -- 數字遊戲

2096: 數字遊戲

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 200  Solved: 57
[Submit][Status][Web Board]

Description

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

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

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

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

 

Input

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

 

Output

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

 

Sample Input

3 13 3

Sample Output

17

HINT

 1 < n,k,T < 1,000,000;

Source

歷屆試題

 

【解題思路】

以Sample爲例,設a爲每輪剛開始加的數,第一輪加的數爲1 2 3所以a1=1,第二輪加的數爲4 5 6所以a2=4,以此類推不難發現a=a+n。設x爲棟棟要報的數,所以棟棟每次要加長度爲n公差爲1的一個等差數列,因爲首相爲ai,所以棟棟每次要加的數列的最後一個數爲ai+1=ai+(n-1),所以棟棟每次要加的數爲這個等差數列求和,即(ai+ai+n-1)*n/2,所以棟棟報的數爲(x+(ai+ai+n-1)*n/2)%k。最後類推一下即可。

【代碼】

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
    LL n,k,t,j=0,ans=1,x=1,a=1;
    scanf("%lld%lld%lld",&n,&k,&t);
    for(int i=0;i<t-1;i++)
    {
        x=((a+a+n-1)*n/2+x)%k;
        //printf("x=%lld\n",x);
        ans+=x;
        a+=n;
    }
    printf("%lld\n",ans);
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章