列表

详情


NC21816. 筱玛的快乐

描述

筱玛是个快乐的男孩子。
寒假终于到了,筱玛决定请他的朋友们一起来快乐。
对于筱玛来说,最快乐的事情莫过于翻看万年历上的日期了。
一个日期是“快乐”的,当且仅当这一年的年份是一个质数,且将月份、日期写成"MM-DD"的形式后是对称的。如:"2003-01-10"是“快乐”的。
筱玛有n个小伙伴,每个小伙伴都会提出一个问题,即:从"2000-01-01"这一天开始,第k个“快乐”的日期是什么。

输入描述

第一行一个整数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;
}

上一题