zoukankan      html  css  js  c++  java
  • ACM 1030:日历本

    这个只能得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               

    提示格式错误,有意者求留言,谢谢!

  • 相关阅读:
    sql 查询服务器硬盘剩余空间
    SQL语句导致cpu占用如此高
    (@WhiteTaken)Unity中Invoke的用法
    (@WhiteTaken)设计模式学习——抽象工厂模式
    (@WhiteTaken)设计模式学习——工厂方法模式
    (@WhiteTaken)设计模式学习——简单工厂模式
    c#中的泛型委托(@WhiteTaken)
    c#中@的作用
    lua读书笔记(@WhiteTaken)
    Unity中的预制的Attributes
  • 原文地址:https://www.cnblogs.com/bkycjj/p/3506413.html
Copyright © 2011-2022 走看看