被3整除—網易網際網路2018筆試題
阿新 • • 發佈:2019-01-02
題目描述:給定一個數列:1,12,123,…,12345678910,1234567891011…,找出指定區間能被3整除的個數。
輸入描述:輸入兩個數字l和r,代表數列的第l個數和第r個數
輸入描述:輸出區間內能被三整除的個數
例:
輸入:2 5
輸出:3
因為12,123,1234,12345中能被3整除的有3個。
分析:
一個數能被3整除的等價情況就是這個數的各個位上的數的和能被3整除。1234567….n 這些數中,每三個數中有兩個能被3整除,當n滿足n%3 == 2時,那麼最後一位數也能被3整除。因此本題的解題思路是,先判斷從 l 到 r 中間有多少個能被3整除即 (r/3-l/3)*2,再考慮邊界條件,當第 l 個能整除3時,ans++;當 r%3 == 2時,則最後一位 r 也能整除3,ans++。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#define LL long long
using namespace std;
LL a, b;
int main()
{
cin >> a >> b;
LL ans = (b / 3 - a / 3) * 2;
if (a % 3 == 0) ans++;
if ((b + 1 ) % 3 == 0) ans++;
cout << ans << endl;
return 0;
}