题目描述
网易
小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。
并且小Q对于能否被3整除这个性质很感兴趣。
小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。
输出一个整数, 表示区间内能被3整除的数字个数。
我的思路
能被3整除的数每项相加都能被3整除,观察数列特征
= = 然后不知所措
解题方法
1. 方法一
看到了一个骚操作
#include <iostream>
using namespace std;
int main()
{
long long left=0, right=0;
//cout<<"please enter left and right"<<endl;
cin>>left>>right;
int count=0;
for(long long i=left; i<=right; i++)
{
if(i%3!=1) count++;
}
cout<<count<<endl;
}
原因在于
2. 方法二
当前数字插入i之后:
i=1-> 1
i=2-> 0
i=3-> 0
i=4-> 1
i=5-> 0
i=6-> 0
i=7-> 1
i=8-> 0
i=9-> 0
i=10->1
i=11->0
··· ···
在区间[1, r]中,共有 ( r + 2 / 3 ) (r+2/3)