刚开始我还没什么头绪,估计一看就是规律吧,结果打了一下表:
然后发现这样写:
然后很明显的等差数列就出来了,最后通式一带判断一下余数和计算行数就AC了;
#include<iostream>
#include<cstdio>
#include<cctype>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<sstream>
#include<fstream>
#include<stack>
#include<map>
#include<queue>
#include<set>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll T;
scanf("%lld",&T);
while(T--){
ll n;
scanf("%lld",&n);
ll t=n%6,r=n/6;//t表示是第几列,注意%6==0的时候是在第六列,r表示的是行数,注意这里要向上取整
if(t==1){
printf("%lld\n",1+(r+1-1)*4);
}else if(t==2){
printf("%lld\n",1+(r+1-1)*3);
}else if(t==3){
printf("%lld\n",0+(r+1-1)*1);
}else if(t==4){
printf("%lld\n",3+(r+1-1)*6);
}else if(t==5){
printf("%lld\n",0+(r+1-1)*1);
}else if(t==0){
printf("%lld\n",3+(r-1)*3);
}
}
return 0;
}