zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯VIP 算法提高 5-3日历

    算法提高 5-3日历
    时间限制:1.0s 内存限制:256.0MB
    问题描述
      已知2007年1月1日为星期一。设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。为完成此函数,设计必要的辅助函数也是必要的。
    样例输入
    一个满足题目要求的输入范例。
    例:

    2050 3
    样例输出
    与上面的样例输入对应的输出。
    例:
    在这里插入图片描述
    数据规模和约定
      输入数据中每一个数的范围。
      例:年 2007-3000,月:1-12。

    import java.util.Scanner;
    
    
    public class 日历 {
    	public static boolean isLeap(int year) {
    		boolean flag = false;
    		if(year % 4 == 0 && year % 100 != 0)
    			flag = true;
    		else if(year % 400 == 0)
    			flag = true;
    		else
    			flag = false;
    		return flag;
    	}
    	public static int getDay(int month, int year) {
    		int day = 0;
    		if (month == 2) {
    			if (isLeap(year)) 
    				day = 29;
    			else 
    				day = 28;
    		} else if (month < 8) {
    			if(month % 2 == 0)
    				day = 30;
    			else
    				day = 31;
    		} else {
    			if(month % 2 == 0)
    				day = 31;
    			else
    				day = 30;
    		}
    		return day;
    	}
    	public static int getFirst(int month, int year) {
    		int first = 0;
    		int distance = year - 2007;
    		int day = 0;
    		
    		while (distance / 4 >= 1) {
    			day += (365 * 4 + 1);
    			distance -= 4;
    		}
    		int count = 0;
    		while (distance > 0) {
    			if (count == 1) 
    				day += 366;
    			else
    				day += 365;
    			count++;
    			distance--;
    		}
    		int fre = 0;
    		if(isLeap(year))
    			fre = 31 + 29;
    		else
    			fre = 31 + 28;
    		int mon[] = {0, 0, 31, fre, fre+31, fre+61, fre+92, fre+122, fre+153, fre+184, fre+214, fre+245, fre+275};
    		day += mon[month];
    		first = day % 7;
    		return first+1;
    	}
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int year = sc.nextInt();
    		int month = sc.nextInt();
    		sc.close();
    		
    		if(year < 2007)
    			return;
    		
    		int day = getDay(month, year);
    		int firstDay = getFirst(month, year);
    		
    		if(month < 10)
    			System.out.println("Calendar " + year + " - 0" + month);
    		else
    			System.out.println("Calendar " + year + " - " + month);
    		for (int i = 0; i < 21; i++) 
    			System.out.print("-");
    		System.out.print("
    ");
    		System.out.println("Su Mo Tu We Th Fr Sa ");		
    		for (int i = 0; i < 21; i++) 
    			System.out.print("-");
    		System.out.print("
    ");
    		int count = 0;
    		if(firstDay != 7)
    			for (int i = 0; i < firstDay; i++) {
    				System.out.print("   ");
    				count++;
    			}				
    		for (int i = 1; i <= day; i++) {
    			if(i < 10)
    				System.out.print(" " + i + " ");
    			else
    				System.out.print(i + " ");
    			count++;
    			if(count % 7 == 0)
    				System.out.print("
    ");
    		}
    		System.out.print("
    ");
    		for (int i = 0; i < 21; i++) 
    			System.out.print("-");
    	}
    
    }
    
    
  • 相关阅读:
    UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
    UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
    【Same Tree】cpp
    【Recover Binary Search Tree】cpp
    【Binary Tree Zigzag Level Order Traversal】cpp
    【Binary Tree Level Order Traversal II 】cpp
    【Binary Tree Level Order Traversal】cpp
    【Binary Tree Post order Traversal】cpp
    【Binary Tree Inorder Traversal】cpp
    【Binary Tree Preorder Traversal】cpp
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078432.html
Copyright © 2011-2022 走看看