LightOJ 1136 Division by 3(取模)

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章