• 算法,java代码实现打印万年历


     

    万年历

    以1900年1月1号星期一为时间原点
    星期日 第一天
    星期一 第二天
    星期二 第三天
    星期三 第四天
    星期四 第五天
    星期五 第六天
    星期六 第七天
              

        1.计算出当前日期距离原点的天数(例:2016/9/18)

          2015到1900之间有多少个瑞年和平年-->count1
          
     
          2016年一月到八月的总天数-->count2
          本月的一号
          count = count1+count2+1

        2.计算出本月的一号是一周的第几天

           k = count%7;(打印一号前面有多少空格)

        3.计算出该月有多少天

           maxDays

        4.循环打印

           1.for(int i=1;i<=maxDays;i++)
           2.k充当指示器,到每周的第七天自动换行
           
     
        
     1 package com.bjsxt.game;
     2 import java.util.Scanner;
     3 public class Calendar {
     4     public static boolean isLeapYear(int year){
     5         if(year%4==0&&year%100!=0 || year%400==0){
     6             return true;
     7         }
     8             return false;
     9     }
    10     
    11     //计算当前月份的最大天数
    12     public static int maxDays(int month,int year){
    13         
    14         int maxDays;
    15         if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
    16                 maxDays =  31;
    17         else if(month==4 || month==6 || month==9 || month==11)
    18                 maxDays =  30;
    19         else{
    20                 if(isLeapYear(year))
    21                     maxDays = 29;
    22                 else
    23                     maxDays = 28;
    24         } 
    25         return maxDays;
    26     }
    27     
    28     //计算当前月份一号是一周的第几天
    29     public static int count(int month,int year){
    30         int k;           //表示当前的输入值是一周的第几天
    31         int r = 0, p = 0;
    32         int count;       //表示距离1970.1.1有多少天
    33         //计算当前年份之前的瑞年和平年有多少个
    34         for(int i=1900;i<year;i++){
    35             if(isLeapYear(i))
    36                 r++;
    37             else
    38                 p++;
    39         }
    40         count = 366*r+365*p;
    41         //判断当前月份之前的总天数
    42         for(int i=1;i<month;i++){
    43                 if(i==2){
    44                     if(isLeapYear(year))
    45                         count = count + 29;
    46                     else
    47                         count = count + 28;
    48                 }
    49                 else if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
    50                     count = count + 31;
    51                 else
    52                     count =  count + 30;        
    53         }
    54         k = (count+1)%7+1;
    55         return k;
    56     }
    57     public static void main(String[] args) {
    58         Scanner input =  new Scanner(System.in);
    59         
    60         System.out.print("请输入年:");
    61         int year = input.nextInt();
    62         
    63         System.out.print("请输入月:");
    64         int month = input.nextInt();
    65         
    66         System.out.print("请输入日:");
    67         int day = input.nextInt();
    68         
    69         int maxDays =  maxDays(month,year); //计算当前输入的月份最大值是多少天
    70         int k = count(month, year);         //计算当前月份的1号是第几天
    71                 
    72         System.out.println("日	一	二	三	四	五	六");
    73         for(int i=0;i<k-1;i++){
    74             System.out.print(" 	");
    75         }
    76         for(int i=1;i<=maxDays;i++){
    77             System.out.print(i+"	");
    78             if(k%7 == 0){
    79                 System.out.println("
    ");
    80                 k = 0;
    81             }
    82             k++;
    83         }
    84     }
    85 }
    View Code
     
  • 相关阅读:
    python
    爬虫
    python 自动登录
    day22 cookie session 中间件 Form
    day10进程、异步IO、
    python第五课
    day21
    day20 Django
    day 19
    day18
  • 原文地址:https://www.cnblogs.com/haozhengfei/p/6507199.html
Copyright © 2020-2023  润新知