YTU OJ 1403: 1.1.3 Friday the Thirteenth 黑色星期五

编程入门 行业动态 更新时间:2024-10-19 09:39:25

YTU <a href=https://www.elefans.com/category/jswz/34/1768308.html style=OJ 1403: 1.1.3 Friday the Thirteenth 黑色星期五"/>

YTU OJ 1403: 1.1.3 Friday the Thirteenth 黑色星期五

1403: 1.1.3 Friday the Thirteenth 黑色星期五

Time Limit: 1 Sec  Memory Limit: 64 MB
Submit: 75  Solved: 40
[Submit][Status][Web Board]

Description

13号又是一个星期5。13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出N年的一个周期,要求计算1900年1月1日至1900+N-1年12月31日中十三号落在周一到周日的次数,N为正整数且不大于400. 这里有一些你要知道的: 1900年1月1日是星期一.4,6,11和9月有30天.其他月份除了2月都有31天.闰年2月有29天,平年2月有28天.年份可以被 4整除的为闰年(1992=4*498 所以 1992年是闰年,但是1990年不是闰年)以上规则不适合于世纪年.可以被400整除的世纪年为闰年,否则为平年.所以,1700,1800,1900 和2100年是平年,而2000年是闰年.请不要预先算好数据(就是叫不准打表 0。0)!

Input

一个正整数n.

Output

七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一...星期五的次数.

Sample Input

20

Sample Output

36 33 34 33 35 35 34

解析:1990年1月1日为周一,13日为周六(13%7=6)

经过一月后(31天)2月13日为6+31%7=9,数字超过了7因此要减去7 9-7=2,因此1990年2月13日为周二,

经过二月后(28天)3月13日为2+28%7=2,数字未超过7,因此1990年3月13日为周二,

经过三月后(30天)4月13日为2+30%7=5,数字未超过7,因此1990年4月13日为周五,

...

由上可知,只要知道每个月有多少天用它除以7取余数再判断一下是否超过了7,就可以知道当前13号为周几,将其存储到一个数组中记录即可。

AC代码:

import java.util.Scanner;
public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int n = sc.nextInt();int a[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//存储每个月份天数int b[] = new int[8];//存储每个星期中对应星期出现的数目int sum = 13;//要求的为13号且1990年1月1日为周一,13不做改变。int m = 0;//存储星期数for (int i = 1900; i < 1900 + n; i++) {for (int j = 0; j < 12; j++) {if (((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) && (j == 2))sum++;//闰年2月份多一天/**经过sum天后当前的星期数*/if (sum % 7 == 0)b[m]++;else if (sum % 7 == 1) {if (m + 1 > 7)m = m + 1 - 7;elsem = m + 1;b[m]++;} else if (sum % 7 == 2) {if (m + 2 > 7)m = m + 2 - 7;elsem = m + 2;b[m]++;} else if (sum % 7 == 3) {if (m + 3 > 7)m = m + 3 - 7;elsem = m + 3;b[m]++;} else if (sum % 7 == 4) {if (m + 4 > 7)m = m + 4 - 7;elsem = m + 4;b[m]++;} else if (sum % 7 == 5) {if (m + 5 > 7)m = m + 5 - 7;elsem = m + 5;b[m]++;} else if (sum % 7 == 6) {if (m + 6 > 7)m = m + 6 - 7;elsem = m + 6;b[m]++;}sum = a[j + 1];//一次循环结束后sum变为当前月份天数}}for (int i = 6; i <= 7; i++)//输出周六周日天数System.out.print(b[i] + " ");for (int i = 1; i < 5; i++)System.out.print(b[i] + " ");//输出周一至周四天数System.out.print(b[5]);//输出周五天数}
}

 

更多推荐

YTU OJ 1403: 1.1.3 Friday the Thirteenth 黑色星期五

本文发布于:2024-03-23 23:50:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1744299.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:OJ   YTU   Thirteenth   Friday

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!