网易2019实习生招聘编程题集合----------被3整除

点击打开链接

时间限制:1秒

空间限制:32768K

小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整除。

题意:求l到r区间内能被3整除的数字个数。

解题思路:判断一个数能不能被3整除,等价于一个数的每位之和能否被3整除。刚开始想打表,但发现数据量是1e9,一维数组最多只能开到1e8.所以就纯暴力判断了,不过数据是有规律的,第一个数是1、第二个数是12,第三个数是123,所以只用判断n*(n+1)/2%3即可。因为数量太大了,所以用long long

#include 

using namespace std;

int main()
{

    long long l,r;
    while(cin>>l>>r)
    {
        long long sum=0;
        for(long long i=l;i<=r;i++)
        {

            if(((i+1)*i/2)%3==0)
            {
                sum++;
            }
        }
        cout<

你可能感兴趣的:(面试题)