这个只能得50分,提示格式有错,1800通过,2010通过,1900出错,自己也不知道哪里格式没对。
题目描述
我们经常需要使用日历,所以需要一个能生成日历的程序。
先要求你写一个程序,只需要输入年份,就能生成正确的日历。
输入格式
输入包含多组测试数据。每组输入一个整数Y(1800<=Y<=2100),表示公元年份。
输出
对于每组输入,输出对应的日立本。选中下面的输出样例查看具体的输出格式,注意空格的输出。
样例输入
2010
样例输出
2010
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
31
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 1 2 3 4 5
4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12
11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19
18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26
25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30
30 31
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 1 2 3 4 5 6 7 1 2 3 4
4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3 4
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31
31
//#include "stdafx.h" #include<iostream> #include<iomanip> using namespace std; int SpaceSize=0; //判断是否为闰年 int isLeapYear(int year) { int leap=0; if (year%4==0&&year%100!=0||year%400==0) { leap=1; } return leap; } int GetMonthDayNumber(int year , int month){ //返回 某一年某一月天数 int daynumber ; if( 2 == month ) { //二月单独处理 if( isLeapYear( year ) ) daynumber = 29 ; else daynumber = 28 ; }else{ if( ( month < 8 && 1 == month % 2) || ( month >= 8 && 0 == month % 2 ) ) // 八月前奇数月为31 天 八月后 偶数为 31 天 daynumber = 31 ; if( ( month < 8 && 0 == month % 2) || ( month >= 8 && 1 == month % 2 ) ) // 八月前偶数月 30 天 八月后 奇数月30 天 daynumber = 30 ; } return daynumber; } int NowToDay(int year,int month ,int day){ int DiDay , i ; for( i = 1800 , DiDay = 0 ; i < year ; i++) // 闰年 单独+ 366 天 if( isLeapYear( i ) ) DiDay += 366 ; else DiDay += 365 ; for( i = 1 ; i < month ; i++ ) DiDay += GetMonthDayNumber( year , i ); DiDay += day - 1 ; return DiDay; } int DisplayYear ( int year ){ int i , j, k , n , month1 ,month2 ,month3 ; // 一个季度输出 month1 month2 month3 是 该月应该有天数 int Excur1 , Excur2 , Excur3 ; // i , j , k 分别表示 三个月的 天数值 Excur1,Excur2,Excur3 表示偏移量 int sea; char Months[12][30]={{" January "},{" February "},{" March "}, {" April "},{" May "},{" June "}, {" July "},{" August "},{" September "}, {" October "},{" November "},{" December "}}; SpaceSize =2 ; cout<<" "<<year<<" "<< endl<< endl; for( sea = 1 ; sea <= 12 ; sea += 3 ){ // 分四个季度显示 Excur1 = ( NowToDay(year,sea , 1 ) + 3 ) % 7; // 分别计算 3 个月的偏移量 Excur2 = ( NowToDay(year,sea+1 , 1 ) + 3 ) % 7; Excur3 = ( NowToDay(year,sea+2 , 1 ) + 3 ) % 7; month1 = GetMonthDayNumber( year ,sea ); // 分别计算 3个月的 天数 month2 = GetMonthDayNumber( year ,sea + 1 ); month3 = GetMonthDayNumber( year ,sea + 2 ); //显示三个月的 星期 cout <<Months[ sea - 1 ] <<Months[ sea ] <<Months[ sea + 1 ] << endl; cout <<"Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa"<<endl; for( n = 1 ; n <= Excur1 ; n++) // 第一行 单独处理 首先输出 多余的空格 然后在输出天数 cout<< setw( SpaceSize ) << " "<<" " ; // i ,j , k 单独保存当前的日期 for( n ; n <= 7 ; n++) cout<< setw( SpaceSize ) << n - Excur1<<" "; cout<<" " ; i = n - Excur1 ; for( n = 1 ; n <= Excur2 ; n++) cout<< setw( SpaceSize ) << " "<<" " ; for( n ; n <= 7 ; n++) cout<< setw( SpaceSize ) << n - Excur2<<" "; cout<<" " ; j = n - Excur2 ; for( n = 1 ; n <= Excur3 ; n++) cout<< setw( SpaceSize ) << " "<<" " ; for( n ; n <= 7 ; n++) if (n==7) cout<< setw( SpaceSize ) << n - Excur3; else cout<< setw( SpaceSize ) << n - Excur3<<" "; cout<< endl ; k = n - Excur3 ; int LineNum=1; while ( i <= month1 || j <= month2 || k <= month3){ // 当三个月的日期都大于 应有的天数后 循环结束 for( n = i ; i < n + 7; i++) // 接下来的 7 天输出一次。但是 大于天数的部分输出空格 if( i <= month1 ) cout<< setw( SpaceSize )<< i<<" " ; else cout<< setw(3)<<" " ; cout<<" " ; for( n = j ; j < n + 7; j++) if( j <= month2 ) cout<< setw( SpaceSize )<< j<<" " ; else cout<< setw( 3 )<<" " ; cout<<" " ; for( n = k ; k < n + 7; k++) if( k <= month3 )//最后一个空格判断 if (k==n+6)cout<< setw( SpaceSize )<< k; else cout<< setw( SpaceSize )<< k<<" " ; else if (k==n+6)cout<<" " ; else cout<<" " ; cout<< endl; LineNum++; } if ((LineNum==5)&&(sea<10)) {cout<<" ";cout<<endl;} } return 0; } int main() { int year; cin>>year; if (year>=1800&&year<=2100) { DisplayYear(year); } else { return 0; } }
1900 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 1 2 3 1 2 3 7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10 14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17 21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24 28 29 30 31 25 26 27 28 25 26 27 28 29 30 31 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 1 2 3 4 5 1 2 8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9 15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16 22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23 29 30 27 28 29 30 31 24 25 26 27 28 29 30 July August September Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 1 2 3 4 1 8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8 15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15 22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22 29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29 30 October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 1 2 3 1 7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8 14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15 21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22 28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29 30 31
提示格式错误,有意者求留言,谢谢!