题目描述
小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。
并且小Q对于能否被3整除这个性质很感兴趣。
小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。
输入描述
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。
输出描述
输出一个整数, 表示区间内能被3整除的数字个数。
输入样例
2 5
输出样例
3
样例说明
12, 123, 1234, 12345…
其中12, 123, 12345能被3整除。
题解:
做题的时候,比较着急。。然后就进行了端点对三去模的结果枚举了一下。。直接看代码,挺容易懂的。。
AC代码:
#include<iostream>
using namespace std;
int main(){
int l , r;
cin >> l >> r;
int ans = 0;
if((l % 3 == 0 && r % 3 == 0) && (l % 3 == 0 && r % 3 == 1)){
ans = (r - l) / 3 * 2 + 1;
}else if(l % 3 == 0 && r % 3 == 2){
ans = (r - l) / 3 * 2 + 2;
}else if(l % 3 == 1 && r % 3 == 0){
ans = (r - l + 1) / 3 * 2;
}else if(l % 3 == 1 && r % 3 == 1){
ans = (r - l) / 3 * 2;
}else if(l % 3 == 1 && r % 3 == 2){
ans = (r - l) / 3 * 2 + 1;
}else if(l % 3 == 2 && r % 3 == 0){
ans = (r - l + 2) / 3 * 2;
}else if(l % 3 == 2 && r % 3 == 1){
ans = (r - l + 1) / 3 * 2;
}else if(l % 3 == 2 && r % 3 == 2){
ans = (r - l) / 3 * 2 + 1;
}
cout << ans << endl;
return 0;
}