【java_蓝桥杯算法训练】算法训练 黑色星期五

举报
昵称: 发表于 2022/02/24 21:40:12 2022/02/24
【摘要】 算法训练 黑色星期五资源限制时间限制:1.0s   内存限制:512.0MB问题描述  有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。  说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除...

算法训练 黑色星期五

资源限制

时间限制:1.0s   内存限制:512.0MB


问题描述



  有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
  说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期四,用户输入的年份肯定大于或等于1998年。
  输入格式:输入只有一行,即某个特定的年份(大于或等于1998年)。
  输出格式:输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。

输入输出样例

样例输入

1998

样例输出

3

分析:

本题的题目是求出在一年中即是13日又是星期五的日期,给出已知1998年1月1日是星期四以及求闰年的方法(即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;)我们可以可以按照1998年1月1日递推出输入值n的值,然后在判断是否是闰年,闰年和平年的区别无非就是平年二月28日,闰年二月29日,其他月份和平年的一样,一、三、五、七、八、十、十二月31天,二、四、六、九、十一月是30天。定义一个sum用来累加n年的即是13日又是星期五的日期。日期使用取模方法来进行循环,0为星期一,6为星期日,去摸7即可。最后进行输出即可。下面我们看代码:


import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		//输入年份
		int n=sc.nextInt();
		//用来累加月份既是13日又是星期五的日期
		int sum=0;
		int x=2;
		//3等于星期四
		//进行循环遍历
		for(int i=1998;i<=n;i++) {
			//用来累加符合条件的sum
			sum=0;
			//用来判断是否是闰年
			if((i%4==0&&i%100!=0)||(i%100==0&&i%400==0)) {
				//遍历一年中的每个月
				for(int j=1;j<13;j++) {
					//判断是不是31天的月份
					if(j==1||j==3||j==5||j==7||j==8||j==10||j==12) {
						for (int j2 = 1; j2 < 32; j2++) {
							//星期自加
							x++;
							//去摸7用来保证循环是0-6用来表示一周
							x=x%7;
							//判断既是13日又是星期五的日期,然后累加
							if(x==4&&j2==13) {
								sum++;
							}
						}
						//判断是不是闰年的二月29日
					}else if(j==2){
						for (int j2 = 1; j2 < 30; j2++) {
							x++;
							x=x%7;
							if(x==4&&j2==13) {
								sum++;
								
							}
						}
					}else {
						//30日的月份进行遍历
						for (int j2 = 1; j2 < 31; j2++) {
							x++;
							x=x%7;
							if(x==4&&j2==13) {
								sum++;
							}
						}
					}
					
				}
			}else {
				//平年同上,除了判断二月的是28天,和上边判断闰年月份一样
				for(int j=1;j<13;j++) {
					if(j==1||j==3||j==5||j==7||j==8||j==10||j==12) {
						for (int j2 = 1; j2 < 32; j2++) {
							x++;
							x=x%7;
							if(x==4&&j2==13) {
								sum++;
							}
						}
		
					}else if(j==2){
						//平年二月28日
						for (int j2 = 1; j2 < 29; j2++) {
							x++;
							x=x%7;
							if(x==4&&j2==13) {
								sum++;
							}
						}
					}else {
						for (int j2 = 1; j2 < 31; j2++) {
							x++;
							x=x%7;
							if(x==4&&j2==13) {
								sum++;
							}
						}
				
			}
			
		}
			}
}
		System.out.println(sum);
	}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。