NC21816. 筱玛的快乐
描述
输入描述
第一行一个整数n。
接下来n行,每行一个数字k,表示一次询问。
输出描述
输出共n行,每行一个形如"YYYY-MM-DD"的日期表示答案。
示例1
输入:
3 1 23 48
输出:
2003-01-10 2027-11-11 2063-12-21
C(clang 3.9) 解法, 执行用时: 299ms, 内存消耗: 11236K, 提交时间: 2019-01-11 21:14:25
#include<math.h> #include<stdio.h> int main() { char b[6][8]={"-01-10","-02-20","-03-30","-10-01","-11-11","-12-21"}; int a[10000],m=0,cnt=0,n,x,i,j,t,t1; scanf("%d",&n); for(i=2000;i<=9999;i++) { for(j=2;j<=sqrt(i);j++) { if(i%j==0) { m=1; break; } } if(m==0) { a[cnt++]=i; } m=0; } while(n--) { scanf("%d",&x); x=x-1; t=x/6; t1=x%6; printf("%d%s\n",a[t],b[t1]); } return 0; }
C++14(g++5.4) 解法, 执行用时: 500ms, 内存消耗: 16072K, 提交时间: 2019-01-11 20:08:09
#include<bits/stdc++.h> using namespace std; int f[1000]; void init() { int k=0,i,j; for(i=2000;i<=9999;i++) { for(j=2;j<=sqrt(i);j++) { if(i%j==0) break; } if(j>sqrt(i)) f[k++]=i; } } int main() { int n,t; int ff[6]={01,02,03,10,11,12}; int fg[6]={10,20,30,01,11,21}; init(); scanf("%d",&n); while(n--) { scanf("%d",&t); printf("%d-%02d-%02d\n",f[(t-1)/6],ff[(t-1)%6],fg[(t-1)%6]); } }
C++11(clang++ 3.9) 解法, 执行用时: 409ms, 内存消耗: 11356K, 提交时间: 2019-01-11 23:48:06
#include<bits/stdc++.h> #define N 10000 bool a[N]={1,1}; int ans[N]; const char b[6][6]={"01-10","02-20","03-30","10-01","11-11","12-21"}; int main() { int n,i,j,T,k=0; for(i=2;i<100;i++) if(!a[i]) for(j=i*i;j<N;j+=i) a[j]=1; for(i=2000;i<N;i++) if(!a[i]) ans[k++]=i; scanf("%d",&T); while(T--) scanf("%d",&n),n--,printf("%d-%s\n",ans[n/6],b[n%6]); return 0; }