Description
There is sequence 1, 12, 123, 1234, ..., 12345678910, ... . Now you are given two integers A and B, you have to find the number of integers from Ath number to Bth (inclusive) number, which are divisible by 3.
For example, let A = 3. B = 5. So, the numbers in the sequence are, 123, 1234, 12345. And 123, 12345 are divisible by 3. So, the result is 2.
Input
Input starts with an integer T (≤ 10000), denoting the number of test cases.
Each case contains two integers A and B (1 ≤ A ≤ B < 231) in a line.
Output
For each case, print the case number and the total numbers in the sequence between Ath and Bth which are divisible by 3.
Sample Input
2
3 5
10 110
Sample Output
Case 1: 2
Case 2: 67
题意:在给的范围内被3除的个数;;
思路:
连续三个整数并排在一起组成的数的数字和必然能被3整除。(x+x+1+x+2=3x+3=3(x+1))
从而有:(这是指一个数中的第几个数)
1.题目中的第3k个数,必然能被三整除。
2. 题目中的第3k + 1个数,其第2个数字到最末一个数字之和必然能被3整除,再加上第一个数字,也就是1,就不能被3整除了。
3. 题目中的第3k + 2个数,其第3个数字到最末一个数字之和必然能被3整除,再加上第一、二个数字,也就是1 + 2 = 3,也能被3整除。
所以1~k中能被3整除的有2k/3+(k%3==2?1:0)个
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int t,h=1;
scanf("%d",&t);
while(t--)
{
long long a,b,m=0,n=0;
scanf("%lld%lld",&a,&b);
n=(a-1)/3*2;
if((a-1)%3==2)
n++;
m=b/3*2;
if(b%3==2)
m++;
printf("Case %d: %lld\n",h++,m-n);
}
return 0;
}