算法,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("日\t一\t二\t三\t四\t五\t六");
73         for(int i=0;i<k-1;i++){
74             System.out.print(" \t");
75         }
76         for(int i=1;i<=maxDays;i++){
77             System.out.print(i+"\t");
78             if(k%7 == 0){
79                 System.out.println("\n");
80                 k = 0;
81             }
82             k++;
83         }
84     }
85 }

时间: 2024-12-11 00:52:48

算法,java代码实现打印万年历的相关文章

java实验之打印万年历

打印万年历(输入年份,月份,输出该月的日历,已知1900年1月1日是星期一),要求: (1)编写一个方法判断闰年: (2)编写一个方法判断某年某月有多少天: (3)编写一个方法计算某年某月前距离1900年1月1日的总天数:(4)编写一个输出某年某月日历的方法: (5)编写一个测试方法. package calendar;import java.util.Scanner;public class calendar { public static void main(String args[]){

算法-java代码实现基数排序

基数排序 第11节 基数排序练习题 对于一个int数组,请编写一个基数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素均小于等于2000. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class RadixSort { 4 // 各位装通法 5 public int[] radixSort(int[] A, in

算法-java代码实现希尔排序

希尔排序 第8节 希尔排序练习题 对于一个int数组,请编写一个希尔排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素小于等于2000. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class ShellSort { 4 public int[] shellSort(int[] A, int n) { 5 int

Java基础之打印万年历

      今天刚开的博客,第一篇博文,一篇关于Java基础的内容,水平有限,多多见谅,希望和大家在学习编程的路上共同进步. 问题:输入年,月,打印对应年月的日历.   示例: ------------------------------------------------------------------------------- ---------------------------------------------------------------------------------

算法-java代码实现计数排序

计数排序 第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class CountingSort { 4 public int[] countingSort(int[] A, int n) { 5 countingSo

算法-java代码实现堆排序

堆排序 第7节 堆排序练习题 对于一个int数组,请编写一个堆排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class HeapSort { 4 public int[] heapSort(int[] A, int n) { 5 int lastIndex = n - 1;

排序与查找简单算法 java代码实现

最近整理了下以前的资料.有的算法没有实现,嘿嘿,以后再补吧! /** * 排序算法的分类如下:      * 1.插入排序(直接插入排序.折半插入排序.希尔排序):      * 2.交换排序(冒泡泡排序.快速排序):      * 3.选择排序(直接选择排序.堆排序):      * 4.归并排序:      *  关于排序方法的选择:      * (1)若n较小(如n≤50),可采用直接插入或直接选择排序.      *  当记录规模较小时,直接插入排序较好:否则因为直接选择移动的记录数少

十大排序算法 JAVA代码

冒泡排序 插入排序 选择排序 希尔排序 归并排序 快速排序 堆排序 计数排序 基数排序 桶排序  O是指计算机执行命令所需的时间 nlogn是算法的时间复杂度,一般排序用的是log2n 总体总结表:这个有个错误就是归并排序需要一个o(n)的辅助数组  冒泡排序 主要思想:外层循环从1到n-1,内循环从当前外层的元素的下一个位置开始,依次和外层的元素比较,出现逆序就交换. 特点:stable sort(稳定性排序).In-place sort(不占用额外的空间,只是交换元素) 最优复杂度:当输入数

常见排序&amp;查询算法Java代码实现

1. 排序算法代码实现 /** * ascending sort * 外层循环边界条件:总共需要冒泡的轮数--每一轮都将最大或最小的数冒泡到最后 * 内层循环边界条件:冒泡数字移动的边界--最终数字需冒泡到此处 * 时间复杂度:O(n^2) * @param arr */ public static void bubbleSort(int[] arr) { if (arr == null) { throw new RuntimeException("Input arr is null!"