日期求星期(java)-蓝桥杯
日期求星期问题(java)-蓝桥杯
1:基姆拉尔森计算公式(计算星期)
公式: int week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
此处y,m,d指代年月日;week代表星期:week= 0---6 对应:星期一到星期日
也可以 int week = (d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
则week代表星期:week= 0---6 对应:星期日到星期六
注意注意注意:使用之前1、2月要看作上一年的13、14月来计算;
public class Demo {
public static void main(String[] args) {
String week = week(2017,12,14);//星期四
System.out.println(week);
}
public static String week(int y, int m, int d){
//1、2月要看作上一年的13、14月来计算
if (m == 1){
m = 13;
y--;
}
if (m == 2){
m = 14;
y--;
}
int week = (d +1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
// 如果是int week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
// 那么就是0对应周一,1对应周二。依次类推
String weekstr = null;
switch (week) {
//这里0-6代表周日到周六
case 1:
weekstr = "星期一";
break;
case 2:
weekstr = "星期二";
break;
case 3:
weekstr = "星期三";
break;
case 4:
weekstr = "星期四";
break;
case 5:
weekstr = "星期五";
break;
case 6:
weekstr = "星期六";
break;
case 0:
weekstr = "星期日";
break;
}
return weekstr;
}
}
2:例题:今夕何夕
接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。
数据范围:
第一行为T,表示输入数据组数。
每组数据包含一个日期,格式为YYYY-MM-DD。
1 ≤ T ≤ 10000
YYYY ≥ 2017
日期一定是个合法的日期,对每组数据输出答案年份,题目保证答案不会超过四位数。
Sample Input
3
2017-08-06
2017-08-07
2018-01-01
Sample Output
2023
2023
2024
利用基姆拉尔森计算公式就比较简单了,但是要注意下:1、2月要看作上一年的13、14月来计算;
代码呈上:
public class Demo2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t = sc.nextInt();
//使用String数组接收
String[] date=new String[t];
for(int i=0;i<t;i++){
date[i]=sc.next();
}
for(int i=0;i<t;i++){
//取字符串中的日期并转化为int类型
int y=Integer.parseInt(date[i].substring(0,4));
int mouth=Integer.parseInt(date[i].substring(5,7));
int day=Integer.parseInt(date[i].substring(8,10));
//1、2月要看作上一年的13、14月来计算
if(mouth==1){
mouth=13;
y--;//不要忘了
}
if(mouth==2){
mouth=14;
y--;
}
//基姆拉尔森计算公式
int week1=(day+2*mouth+3*(mouth+1)/5+y+y/4-y/100+y/400)%7;
//暴力搜索比较两日期
for(int year=y+1;year<=9999;year++){
int week2=(day+2*mouth+3*(mouth+1)/5+year+year/4-year/100+year/400)%7;
// week 从0-6 分别是星期一到星期日
if(week1==week2){
if(mouth==13||mouth==14){//要把剪掉的一年加上
System.out.println(year+1);
}else{
System.out.println(year);
}
break;//找到最近的输出后就跳出循环
}
}
}
}
}
补充:java强大的类库:日历类:
Calendar calendar = Calendar.getInstance(); //创建对象
//如:2017年12月29日:星期五
calendar.set(2017 , 11, 29); //传入日期;注意:月份是用0-11代表1-12月
int a = calendar.get(Calendar.DAY_OF_WEEK); //取得星期
System.out.println(a);//注意:1-7代表星期日-星期六
通过此方法可以更方便的得到星期;
用这个解决上述题肯定更快啦;就不啰嗦了。
错误或不足的地方欢迎指正!! 最后分享一个喜欢的句子:
个性是什么?在我的理解里,是在合法的范围内由着自己的性子去做想做的事。而非刻意去与他人保持不同。因为你喜欢的事或人,很可能别人也正喜欢着。
日期求星期(java)-蓝桥杯的更多相关文章
- Java 蓝桥杯 算法训练(VIP) 最大体积
最大体积 问题描述 每个物品有一定的体积(废话),不同的物品组合,装入背包会战用一定的总体积. 假如每个物品有无限件可用,那么有些体积是永远也装不出来的. 为了尽量装满背包,附中的OIER想要研究一下 ...
- Java蓝桥杯练习题——求小数n位后3个数
求整数除法小数点后第n位开始的3位数 位数不足的补0,如0.125小数第3位后三位:0.12500→500 输入格式:a b n,空格分开,a是被除数,b是除数,n是小数后的位置 输出格式:3位数字, ...
- Java 蓝桥杯 算法训练 貌似化学
** 貌似化学 ** 问题描述 现在有a,b,c三种原料,如果他们按x:y:z混合,就能产生一种神奇的物品d. 当然不一定只产生一份d,但a,b,c的最简比一定是x:y:z 现在给你3种可供选择的物品 ...
- Java蓝桥杯——贪心算法
贪心算法 贪心算法:只顾眼前的苟且. 即在对问题求解时,总是做出在当前看来是最好的选择 如买苹果,专挑最大的买. 最优装载问题--加勒比海盗 货物重量:Wi={4,10,7,11,3,5,14,2} ...
- Java蓝桥杯练习题——Huffman树
Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, -, pn-1},用这列数构造Huffman树的过程如下: 找到{pi}中 ...
- Java蓝桥杯02——第二题集锦:生日蜡烛、星期一、方格计数、猴子分香蕉
第二题 生日蜡烛(结果填空) 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填 ...
- JAVA蓝桥杯黄金分割数,涉及到bigdecimal
import java.math.BigDecimal; public class test { public static void main(String[] args) { BigDecimal ...
- 密码脱落 JAVA 蓝桥杯
密码脱落 X星球的考古学家发现了一批古代留下来的密码.这些密码是由A.B.C.D 四种植物的种子串成的序列.仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串).由于年代久远,其中许多 ...
- java 蓝桥杯算法提高 出现次数最多的整数
思路:其实这道题不是太难,但是这个题太坑了,提交了好多次都不是100,后来才知道,一定一定要在输入数组数据之前先判断一下输进去的n的范围,一定一定要注意,否则就是跟我下面的图片一样的效果了,泪奔~ 问 ...
随机推荐
- 深入学习css伪类和伪元素及其用法
前言 CSS的伪类和伪元素在平时的代码中经常会出现,可是一旦别人问你,什么是伪类,什么是伪元素,可能还是不能完整的表述出来,下面我们来一探究竟. 伪类和伪元素定义 伪类用于在页面中的元素处于某个状态时 ...
- [译]Ocelot - Middleware Injection and Overrides
原文 使用这个特性的时候要小心点. 可以如下一样提供一些中间件用以覆盖默认的中间件: var configuration = new OcelotPipelineConfiguration { Pre ...
- [译]Ocelot - Headers Transformation
原文 Add to Request 为上游请求添加请求头,只需如下一样将下面的配置添加到一个ReRoute里: "UpstreamHeaderTransform": { " ...
- C++自定义String字符串类,支持子串搜索
C++自定义String字符串类 实现了各种基本操作,包括重载+号实现String的拼接 findSubStr函数,也就是寻找目标串在String中的位置,用到了KMP字符串搜索算法. #includ ...
- H5取经之路——添加hover实现特定效果
一.鼠标指上后显示二维码,效果图如下: 鼠标未指上时: 鼠标指上后: 代码如下: .div1 .li2 .code_wexin{ width: 0px; height: 0px; position: ...
- 编译Android ROM环境搭建
环境搭建 1 安装ubuntu 推荐12.04或13.10 2 安装jdk7和一些所需要的包安装jdk7$ sudo apt-get update$ sudo apt-get install open ...
- elk搭建日志系统
参考:https://www.cnblogs.com/yuhuLin/p/7018858.html 以上这篇文章已经写的很好很全了,之所以再自己写一遍大概就是记录一下,以后可能会有用吧 安装elast ...
- Shell 基础教程
一个比较好的shell基础教程: http://www.runoob.com/linux/linux-shell.html
- Centos7中一键安装zabbix
作者:邓聪聪 #!/bin/shlog=/root/install.logexec 2>>$log #关闭SELINUX,防火墙 systemctl stop firewalld.serv ...
- 解决tomcat端口被占用:Port 8005 required by Tomcat v7.0 Server at localhost is already in use
问题提示8005端口被占用 首先:在cmd下,输入 netstat -ano|findstr 8005 (什么端口号被占用就输入什么端口号),回车 再输入 taskkill /pid 20 ...