被3整除

小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。

并且小Q对于能否被3整除这个性质很感兴趣。

小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。

输入描述:

输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。

输出描述:

输出一个整数, 表示区间内能被3整除的数字个数。

输入例子1:

2 5

输出例子1:

3

例子说明1:

12, 123, 1234, 12345… 其中12, 123, 12345能被3整除。

时空限制:

时间限制:1秒 空间限制:32768K

解题思路:
对于一个数是否可以被3整除,只需要判断每一位的总和能否被3整除。

12 -> (1 + 2) % 3 == 0 被3整除
123 ->(1 + 2 + 3) % 3 == 0 被3整除
1234 -> (1 + 2 + 3 + 4) % 3 == 1 不被3整除
12345 -> (1 + 2 + 3 + 4 + 5) % 3 == 0 被3整除

#include 
#include 
#include 
#include 
using namespace std;

class Solution{
public:
    int dividedByThree(int l, int r){
        if(l > r) return 0;

        long long sum = 0; // 求和
        int res = 0;
        for(int i = 0; i < l; ++i){
            sum += i;
        }
        for(int i = l; i <= r; ++i){
            sum += i;
            if(sum % 3 == 0){
                ++res;
            }
        }
        return res;
    }
};

int main(){
    int l, r;
    cin >> l >> r;
    Solution s;
    cout << s.dividedByThree(l, r);
    return 0;
}

你可能感兴趣的:(网易校招真题,算法与数据结构,校招真题)