一些數: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;
}
}