2019校招真題 數對

2021-09-25 17:50:53 字數 1111 閱讀 1525

牛牛以前在老師那裡得到了乙個正整數數對(x, y), 牛牛忘記他們具體是多少了。

但是牛牛記得老師告訴過他x和y均不大於n, 並且x除以y的餘數大於等於k。

牛牛希望你能幫他計算一共有多少個可能的數對。

輸入描述:

輸入包括兩個正整數n,k(1 <= n <= 10^5, 0 <= k <= n - 1)。

輸出描述:

對於每個測試用例, 輸出乙個正整數表示可能的數對數量。

因為x除以y餘數要大於等於k,所以y必須是[k-1,n]之間的整數。

為了更好地認識問題,用乙個例子觀察一下,比如此時x=11,y=4,k=3則

x=1,2,3,4 \quad

5,6,7,8 \quad

9,10,11

因為y=4,所以可以將資料4個一組,發現在每一組中餘數的規律為1,2,3,0。因此可以確定每一組符合條件的x有y-k個,而n個數字中總共有n/y個,因此總共的符合條件的數對有(n%y)*(y-k)。

但是在n個數字中,最後一組數字往往不完整,所以需要特殊處理。最後一組數字的長度為n%k。剩下的數字中,前面的k-1(上例的9,10)個除以y餘數都是小於k,因此剩下的數字中共有n%k-(k-1)個滿足條件的。

分析完畢,**如下:

#include

#include

using

namespace std;

intmain()

for(

long

long y = k+

1; y <=n; y++

) cout

}

另外,演算法核心是在for迴圈中,對於每乙個符合的y,先算出n中以y為長度的每組數字中中符合的x。然後在最後一組數字中獲得符合的x。但是如果當k==0時,在最後一組數字獲得的x數量將會出錯,因此當k==0時直接輸出結果。

另外,在計算(n/y)*(y-k)時,由於n的取值最大為105

10^5

105,如果用int來儲存的話將會溢位。因此用long long來儲存各項資料。

2019校招真題程式設計(五)數對

網易 牛牛以前在老師那裡得到了乙個正整數數對 x,y 牛牛忘記他們具體是多少了。但是牛牛記得老師告訴過他x和y均不大於n,並且x除以y的餘數大於等於k。牛牛希望你能幫他計算一共有多少個可能的數對。輸入包括兩個正整數n,k 1 n 10 5,0 k n 1 對於每個測試用例,輸出乙個正整數表示可能的數...

2019校招真題程式設計(十)瞌睡

小易覺得高數課太無聊了,決定睡覺。不過他對課上的一些內容挺感興趣,所以希望你在老師講到有趣的部分的時候叫醒他一下。你知道了小易對一堂課每分鐘知識點的感興趣程度,並以分數量化,以及他在這堂課上每分鐘是否會睡著,你可以叫醒他一次,這會使得他在接下來的k分鐘內保持清醒。你需要選擇一種方案最大化小易這堂課聽...

校招真題 水仙花數

春天是鮮花的季節,水仙花就是其中最迷人的代表,數學上有個水仙花數,他是這樣定義的 水仙花數 是指乙個三位數,它的各位數字的立方和等於其本身,比如 153 1 3 5 3 3 3。現在要求輸出所有在m和n範圍內的水仙花數。輸入資料有多組,每組佔一行,包括兩個整數m和n 100 m n 999 對於每個...