一些数:1, 12, 123, 1234, ..., 12345678910, ... 然后给出两个数A, B,求出第A个数和第B数之间又多少个数能够被3整除。
首先要运用到一个性质:
一个数的数字和相加能被三整除,那么这个数也能被3整除。(1)
然后可以发现:
连续三个整数并排在一起组成的数的数字和必然能被3整除。(2)
最后通过(2)总结出:
1.题目中的第3K个数,必然能被三整除。
2. 题目中的第3K + 1个数,其第2个数字到最末一个数字之和必然能被3整除,再加上第一个数字,也就是1,就不能被3整除了。
3. 题目中的第3K + 2个数,其第3个数字到最末一个数字之和必然能被3整除,再加上第一、二个数字,也就是1 + 2 = 3,也能被3整除。
总结出这些规律,编码也就不难了。
#include<iostream>
using namespace std;
int main(){
int A, B, T;
int caseNo = 0;
cin >> T;
while(T--){
int count = 0;
cin >> A >> B;
count = (B - A + 1) / 3 * 2;
if((B - A + 1) / 3 * 3 == B - A - 1){
if(B % 3 == 0 || B % 3 == 2)
count++;
if((B - 1) % 3 == 0 || (B - 1) % 3 == 2)
count++;
}
if((B - A + 1) / 3 * 3 == B - A){
if(B % 3 == 0 || B % 3 == 2)
count++;
}
cout << "Case " << ++caseNo << ": " << count << endl;
}
}