1. 程式人生 > >網易前端筆試程式設計題——數對

網易前端筆試程式設計題——數對

題目大意

牛牛以前在老師那裡得到了一個正整數數對(x, y), 牛牛忘記他們具體是多少了。
但是牛牛記得老師告訴過他x和y均不大於n, 並且x除以y的餘數大於等於k。
牛牛希望你能幫他計算一共有多少個可能的數對。

輸入描述

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

輸出描述

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

輸入樣例

5 2

輸出樣例

7

樣例說明

滿足條件的數對有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)

題解

這道題在筆試的時候沒有寫出來。。。。因為後面還有兩道問答題。所以還是放棄了,結果問答題也不會。。。其實這道題當時思路已經基本對了,加上一著急,就GG了。。千言萬語匯成一句話:怪我太渣。。。考完之後想了想,然後AC了。就是一個迴圈節,找到了規律就好了。網易爸爸,我還會再來的。。。

AC程式碼:

#include<iostream>
using namespace std;
int main(){
    long long n , k;
    long long ans = 0;
    cin >> n >> k;
    if
(k == 0){ cout << n * n << endl; return 0; } for(long long i = k + 1;i <= n;i++){ ans += (n / i) * (i - k); //找前(n / i * i)個數裡面有幾個迴圈節,每一個節有(i - k)個數 if(n % i >= k){ ans += n % i - k + 1;//剩下的數不足一個迴圈節,找第(n / i * i + 1 , n)裡面有幾個數滿足題意 } } cout
<< ans << endl; return 0; }