Light OJ 1136

Division by 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 <cstdio>  
#include <cstring>  
#include <algorithm>  
#include <iostream>  
using namespace std;  
int fun(int n)  
{  
    if(n==1||n==0)  
        return 0;  
    return n-1-(n-1)/3;  
}  
int main()  
{  
    int a,b,t;  
    scanf("%d",&t);  
    for(int i=1;i<=t;i++)  
    {  
        scanf("%d%d",&a,&b);  
        printf("Case %d: %d\n",i,fun(b)-fun(a-1));  
    }  
    return 0;  
}  

 

posted @ 2014-12-17 04:58  zmiao  阅读(125)  评论(0编辑  收藏  举报