2019百度之星初赛一 1005 Seq HDU - 6672 (打表找规律)

Seq HDU - 6672

题目链接:https://vjudge.net/problem/HDU-6672

题目:

思路:这种题一看数据量那么大,而且是求公式,首先先打100个数据出来看看规律即可,以下代码注释的部分是我一开始打表观察数据的,应该很容易找到当是6的倍数时,

结果是它的一半,然后就很容易想到当模6余几的情况,继续找规律即可,我打出的100个数据如下:

 

 

 

AC代码如下:

// 
// Created by HJYL on 2019/8/17.
//
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include<math.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+10;
//ll a[maxn];
//void get()
//{
//    a[1]=1;
//    for(int i=2;i<=100;i++)
//    {
//        ll sum=0;
//        for(int j=1;j<i;j++)
//        {
//            sum+=(j*a[j]);
//        }
//        a[i]=sum%i;
//    }
//}
int main()
{
    //freopen("C:\\Users\\asus567767\\CLionProjects\\untitled\\text","r",stdin);
//    get();
//    for(int i=1;i<=100;i++)
//        cout<<a[i]<<" ";
    int T;
   scanf("%d",&T);
    while(T--){
        long long n;
        scanf("%lld",&n);
        if(n%6==0)
            printf("%lld\n",n/2);
        if(n%6==1)
            printf("%lld\n",n-n/3);
        if(n%6==2)
            printf("%lld\n",n/2);
        if(n%6==3)
            printf("%lld\n",n/6);
        if(n%6==4)
            printf("%lld\n",n-1);
        if(n%6==5)
            printf("%lld\n",n/6);
    }
    return 0;
}

 

posted @ 2019-08-18 00:21  branna  阅读(194)  评论(0编辑  收藏  举报