打印月历 Open Judge

这篇文章介绍了如何使用C++解决一个关于模拟题的问题,涉及到计算给定一年中特定月份第一天是星期几,以及处理闰年的逻辑。作者提供了参考代码,展示了如何逐步模拟和计算日期。
摘要由CSDN通过智能技术生成

题面链接: http://noi.openjudge.cn/ch0113/24/

题目描述:

评析: 大模拟题,考察的是你的耐心和毅力!很不错的模拟题练习题,小白(like me)可以练一练

思路: 先一个月一个月的模拟,求出来题目问的这个一年的这一个月的第一天是星期几,然后一天一天模拟,将整个月份表打印出来. 需要注意的是闰年的二月份是有29天.

参考代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int yue[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int t_y,t_m;
int cur_y,cur_m,cur_d;
int xing;

int ifrun(int x){
	if(x%400==0) return 1;
	if((x%4==0) && (x%100)) return 1;
	return 0;
}

void cal_xing(int x){
	x%=7;
	xing+=x;
	xing%=7;
	if(xing==0) xing=7;
	return ;
}

void cal(){
	cur_y=1900;
	cur_m=1;
	xing=1;
	while(1){
		if(cur_y==t_y&&cur_m==t_m) break;
		int tmp=yue[cur_m];
		if(ifrun(cur_y)&&cur_m==2) tmp++;
		cal_xing(tmp);
		cur_m++;
		if(cur_m==13){
			cur_m=1;
			cur_y++;
		}
	}
	
	return ;
}
void outputs(){
	printf("Sun Mon Tue Wed Thu Fri Sat\n");
	int cur_x,cur_y;
	xing%=7;
	cur_y=xing*4+1;
	int cur_day=1;
	int total_d=yue[t_m];
	if(ifrun(t_y)&&t_m==2) total_d++;
	for(int i=1;i<cur_y-1;i++) printf(" ");
	while(cur_day<=total_d){
		if(xing)
		printf(" ");
		printf("%3d",cur_day);
		
		xing++;
		if(xing==7){
			xing=0;
			printf("\n");
		}
		cur_day++;
	}
	return ;
}

int main(void){
	
	scanf("%d%d",&t_y,&t_m);
	cal();
	//cout << xing << endl;
	outputs();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值