“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛 F 日期小助手

题目来源:点击这里
题目描述
作为一个关心父母的孩子,Compute 会在每年的母亲节和父亲节为父母准备礼物。可是粗心的他却不记得它们的具体日期了。
已知:母亲节在每年 5 月的第 2 个周日;父亲节在每年 6 月的第 3 个周日。
现在你需要告诉他,下一个(不包括当天)母亲节或父亲节是在什么时候。
输入描述:
第一行包含一个整数 T (T \leq 100T≤100),表示测试数据的组数。
对于每组数据,包含三个整数 y, m, d,中间以空格分隔,分别表示今天的年、月、日。
输入保证是一个在公元 2000 年 1 月 1 日 到 2100 年 12 月 31 日间的合法日期。
输出描述:
对于每组数据,在一行输出下一个需要准备礼物的节日和日期。格式参考样例输出。
输入样例:

7
2000 1 1
2001 1 1
2002 1 1
2003 1 1
2020 1 1
2020 5 10
2020 6 21

输出样例:

Mother's Day: May 14th, 2000
Mother's Day: May 13th, 2001
Mother's Day: May 12th, 2002
Mother's Day: May 11th, 2003
Mother's Day: May 10th, 2020
Father's Day: June 21st, 2020
Mother's Day: May 9th, 2021

代码如下:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct node1{
	int a,b,c;
}kkk[210];
int main() {
	int ttt,j=0,muhao=14,fuhao=18;
	int s,t,r;
	for(int i=0;i<=100;i++){
		kkk[j].a=i+2000;
		kkk[j].b=5;
		kkk[j].c=muhao;
		if( (i+1)%4==0 && i!=99) muhao-=2;
		else muhao-=1;
		if(muhao<=7) muhao+=7;
		j++;
		kkk[j].a=i+2000;
		kkk[j].b=6;
		kkk[j].c=fuhao;
		if( (i+1)%4==0 && i!=99) fuhao-=2;
		else fuhao-=1;
		if(fuhao<=14) fuhao+=7;
		j++;
	}
	scanf("%d",&ttt);
	/*for(int i=0;i<j;i++){
		printf("%d %d %d\n",kkk[i].a,kkk[i].b,kkk[i].c);
	}*/
	for(int i=0;i<ttt;i++){
		scanf("%d %d %d",&s,&t,&r);
		//printf("%d %d %d\n",s,t,r);
		int cnt=0;
		for(int k=0;k<j;k++){
			if(s<kkk[k].a){
				cnt=1;
			}
			else {
				if(s==kkk[k].a){
					if(t<kkk[k].b) cnt=1;
					else {
						if(t==kkk[k].b){
							if(r<kkk[k].c){
								cnt =1;
							}
							else cnt=0;
						}
						else cnt=0;
					}
				}
				else cnt=0;
			}
			if(cnt) {
				if(kkk[k].b%2){//mu
					printf("Mother's Day: May ");
					if(kkk[k].c==1||kkk[k].c==21||kkk[k].c==31)
						printf("%dst, ",kkk[k].c);
					else if(kkk[k].c==2||kkk[k].c==22){
						printf("%dnd, ",kkk[k].c);
					}
					else if(kkk[k].c==3||kkk[k].c==23){
							printf("%drd, ",kkk[k].c);
						}
					else printf("%dth, ",kkk[k].c);
					printf("%d\n",kkk[k].a);
				}
				else{//fu
					printf("Father's Day: June ");
					if(kkk[k].c==1||kkk[k].c==21||kkk[k].c==31)
						printf("%dst, ",kkk[k].c);
					else if(kkk[k].c==2||kkk[k].c==22){
						printf("%dnd, ",kkk[k].c);
					}
					else if(kkk[k].c==3||kkk[k].c==23){
						printf("%drd, ",kkk[k].c);
					}
					else printf("%dth, ",kkk[k].c);
					printf("%d\n",kkk[k].a);
				}
				break;
			}
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值