藍橋杯 數字遊戲

2021-07-29 16:01:46 字數 607 閱讀 1558

問題描述如下:

問題不難,最大的問題是溢位,如果使用long long而直接暴力求借,溢位問題依舊存在。如何解決呢,不難得出第i個人心中的數是1+(1+2+3+……+(i-1)),所以到下一次棟棟心裡的數為1+(1+2+3+4+5+……+n);其中n為已經有n人次報過數;

為了避免溢位,筆者的做法是保留上次棟棟報數的值,假設為num,統計棟棟本輪報數相對於上輪的增量,這個增量通過使用等差數列公式求出:即(left+right)*n/2;這裡用到乙個技巧,即先對left取餘,而非計算出結果之後再取餘,能有效避免溢位:

#include

using

namespace

std;

long

long getresult(long

long nn,long

long kk,long

long tt)

right=left+nn-1;

}return result;

}int main()

藍橋杯 數字遊戲

題目描述 解題過程 最初以為是乙個迴圈節問題,樣例確實是迴圈的,多寫幾組就發現了。但是,其實是乙個坑,根本不是什麼迴圈節。於是我直接暴力做了一遍,過了一半資料 include using namespace std const int maxn 1e6 7 typedef long long ll ...

藍橋杯 數字遊戲

問題 給定乙個1 n的排列a i 每次將相鄰兩個數相加,得到新序列,再對新序列重複這樣的操作,顯然每次得到的序列都比上一次的序列長度少1,最終只剩乙個數字。例如 3 1 2 4 4 3 6 7 9現在如果知道n和最後得到的數字sum,請求出最初序列a i 為1 n的乙個排列。若有多種答案,則輸出字典...

藍橋杯 歷屆試題 數字遊戲

這道題給了乙個很明顯的乙個序列,那麼就是數列可以一次寫為 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和...