wu


私信TA

用户名:cncfvc

访问量:215798

签 名:

读研狗没有时间刷题了~~

等  级
排  名 2
经  验 36090
参赛次数 8
文章发表 265
年  龄 25
在职情况 学生
学  校 电子科技大学
专  业 通信工程

  自我简介:

写代码 真好玩 ~

解题思路:

这个题目是传统的打印日历的题目  不是很难 但要很细心
注意仔细观察样例的输出格式 才有可能AC


参考代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
bool judge(int year)//判断是不是闰年
{
	if(year%4==0&&year%100!=0||year%400==0)
	return true;
	else
	return false;
}
int DaysReturn(int year,int month)//找出输入的日期的月份的一号距离2007年1月1日有多少天
{
	int sum=0;//统计一年内的天数
	int sum1=0;//统计间隔了多少年的天数
	if(judge(year))
	{
		switch(month)
		{
			case 1: sum=0;break;
			case 2: sum=31;break;
			case 3: sum=31+29;break;
			case 4: sum=31+29+31;break;
			case 5: sum=31+29+31+30;break;
			case 6: sum=31+29+31+30+31;break;
			case 7: sum=31+29+31+30+31+30;break;
			case 8: sum=31+29+31+30+31+30+31;break;
		    case 9: sum=31+29+31+30+31+30+31+31;break;
		    case 10: sum=31+29+31+30+31+30+31+31+30;break;
		    case 11: sum=31+29+31+30+31+30+31+31+30+31;break;
		    case 12: sum=31+29+31+30+31+30+31+31+30+31+30;break;
				
		}
	}
	else
	{
		switch(month)
		{
			case 1: sum=0;break;
			case 2: sum=31;break;
			case 3: sum=31+28;break;
			case 4: sum=31+28+31;break;
			case 5: sum=31+28+31+30;break;
			case 6: sum=31+28+31+30+31;break;
			case 7: sum=31+28+31+30+31+30;break;
			case 8: sum=31+28+31+30+31+30+31;break;
		    case 9: sum=31+28+31+30+31+30+31+31;break;
		    case 10: sum=31+28+31+30+31+30+31+31+30;break;
		    case 11: sum=31+28+31+30+31+30+31+31+30+31;break;
		    case 12: sum=31+28+31+30+31+30+31+31+30+31+30;break;
				
		}
	}
	for(int i=2007;i<year;i++)
	{
		if(judge(i))
		{
			sum1+=366;
		}
		else
		sum1+=365;
	}
	sum1+=sum;//总天数
	return sum1; 
}
void Print(int year,int days,int month)
{
	
	int x=days%7+1;//找出这个月的1号是星期几
	int monthdays;//这个月有多少天
	cout<<"---------------------"<<endl;
	cout<<" Su Mo Tu We Th Fr Sa"<<endl;
	cout<<"---------------------"<<endl;
		if(month==2)
		{
		    if(judge(year))
	            monthdays=29;
	            else
	            monthdays=28;
		}
		else if(month==4||month==9||month==6||month==11)
		{
			monthdays=30;
		}
		else monthdays=31;
	if(x==7)
	printf("%3d",1);//针对每个月一号不同的星期制定不同的输出格式
	if(x==1)
	printf("%6d",1);
	if(x==2)
	printf("%9d",1);
	if(x==3)
	printf("%12d",1);
	if(x==4)
	printf("%15d",1);
	if(x==5)
	printf("%18d",1);
	if(x==6)
	printf("%21d",1);
	for(int i=2;i<=monthdays;i++)
	{
		printf("%3d",i);
		if((i+(x%7))%7==0&&i<monthdays) printf("\n");//注意如果一个月的最后一号是星期6则无需空行	
	}
	cout<<endl;
	cout<<"---------------------"<<endl;
}
int main()
{
    int year,month;
    while(cin>>year>>month)
	{
	int days=DaysReturn(year,month);
	Print(year,days,month);
    }
	return 0;   	
}


 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

输入   2018 9   看下国庆假期     结果发现输出有点特别  哈哈哈,奇怪奇怪真奇怪
2018-09-21 10:22:06
大佬就是不一样
2018-02-11 15:08:24
switch用得好~
请收下我的膝盖~
2018-02-03 21:53:43
  • «
  • 1
  • »