1. 程式人生 > >被3整除—網易網際網路2018筆試題

被3整除—網易網際網路2018筆試題

題目描述:給定一個數列: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; }