2019 年百度之星·程序设计大赛 - 初赛一 1005 Seq(数学规律)

2019 年百度之星·程序设计大赛 - 初赛一 1005  Seq(数学规律)

 http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=861&pid=1005

 

Sample Input

5
1
2
3
4
5

 

Sample Output

1
1
0
3
0

 

 

这题第一反应打表,先计算,后查询输出,后来注意到数据太大,行不通

索性把打好的表输出来找规律,果然有规律可循

奇数和偶数有不同的规律,但周期都是3

大家可以把下面的代码跑一下,分别输出1到30之间的奇数和偶数项的结果,试着自己找一找规律

 

代码如下:

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <queue>
#include <set>
#include <math.h>
const int INF=0x3f3f3f3f;
typedef long long LL;
const int mod=1e9+7;
const double PI=acos(-1);
const int maxn=1e5+10;
using namespace std;


int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        LL n;
        scanf("%lld",&n);
        if(n&1==1)//奇数项 
        {
            LL num,a,b;
            int p,q;
            num=(n+1)/2;//算一下是第几个奇数 
            p=1;
            q=0;
            a=num/3;
            b=num%3;
            if(b==1)
                printf("%lld\n",p+4*a);
            else if(b==2)
                printf("%lld\n",q+a);
            else if(b==0)
                printf("%lld\n",q+a-1);
        }
        else//偶数项 
        {
            LL num,a,b;
            num=n/2;//算一下是第几个偶数 
            if(n==2) //把2当做了特殊项,便于以后计算 
                printf("1\n");
            else
            {
                a=(num-1)/3;
                b=(num-1)%3;
                if(b==1)
                    printf("%lld\n",n-1);
                else
                    printf("%lld\n",n/2);
            }
        }
    }
    return 0;
}

 

posted @ 2019-08-17 23:55  jiamian22  阅读(408)  评论(0编辑  收藏  举报