算法笔记_154:算法提高 日期计算(Java)
目录
1 问题描述
YYYY MM DD
W
1 <= MM <= 12
1 <= DD <= 31,且确保测试样例中YYYY年MM月DD日是一个合理日期
1 <= W <= 7,分别代表周一到周日
2 解决方案

具体代码如下:
import java.util.Scanner;
public class Main {
public boolean judgeYear(int year) {
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
return true; //此时为闰年
return false; //此时为平年
}
public int getMonth(int year, int month) { //获取月份天数
if(month == 1 || month == 3 || month == 5 || month == 7 ||
month == 8 || month == 10 || month == 12)
return 31;
if(month == 4 || month == 6 || month == 9 || month == 11)
return 30;
if(judgeYear(year) && month == 2)
return 29;
if(!judgeYear(year) && month == 2)
return 28;
return 0;
}
public void getResult(String date) {
String[] temp = date.split(" ");
int year = Integer.valueOf(temp[0]);
int month = Integer.valueOf(temp[1]);
int day = Integer.valueOf(temp[2]);
int countDay = 0;
int result = 0; //最终结果
if(year > 2011) {
for(int i = 1;i < month;i++)
countDay += getMonth(year, i);
countDay += day;
for(int i = year - 1;i > 2011;i--) { //跳出循环时i = 2011
if(judgeYear(i))
countDay += 366;
else
countDay += 365;
}
countDay = countDay + 19 + 31; //加上2011年11月份剩余天数和12月份31天
result = 5 + countDay % 7;
if(result != 7)
result = result % 7;
} else if(year < 2011){
countDay = countDay + (getMonth(year, month) - day);
month++;
for(;month <= 12;month++)
countDay += getMonth(year, month);
for(int i = year + 1;i < 2011;i++) { //跳出循环时i = 2011
if(judgeYear(i))
countDay += 366;
else
countDay += 365;
}
for(int i = 1;i <= 10;i++)
countDay += getMonth(2011, i);
countDay += 11;
result = 5 - countDay % 7;
if(result == 0)
result = 7;
else if(result == -1)
result = 6;
else if(result == -2)
result = 5;
} else if(year == 2011) {
if(month > 11) {
countDay = countDay + 19 + day;
} else if(month == 11) {
if(day >= 11) {
countDay = day - 11;
} else if(day < 11)
countDay = 11 - day;
} else if(month < 11) {
countDay += getMonth(2011, month) - day;
int i = month + 1;
for(;i <= 10;i++)
countDay += getMonth(2011,i);
countDay += 11;
}
if(month >= 11 && day >= 11) {
result = 5 + countDay % 7;
if(result != 7)
result = result % 7;
} else {
result = 5 - countDay % 7;
if(result == 0)
result = 7;
else if(result == -1)
result = 6;
else if(result == -2)
result = 5;
}
}
System.out.println(result);
}
public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
String date = in.nextLine();
test.getResult(date);
}
}
算法笔记_154:算法提高 日期计算(Java)的更多相关文章
- Java实现 蓝桥杯 算法提高 日期计算
算法提高 日期计算 时间限制:1.0s 内存限制:256.0MB 问题描述 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况.尤其是逢百年不闰,逢400年闰的情 ...
- 算法笔记_155:算法提高 概率计算(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率. 输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔. 输出格式 输出一行 ...
- 算法笔记_165:算法提高 道路和航路(Java)
目录 1 问题描述 2解决方案 1 问题描述 问题描述 农夫约翰正在针对一个新区域的牛奶配送合同进行研究.他打算分发牛奶到T个城镇(标号为1..T),这些城镇通过R条标号为(1..R)的道路和P条 ...
- CCF201509-2 日期计算 java(100分)
试题编号: 201509-2 试题名称: 日期计算 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有2 ...
- iOS学习笔记37-时间和日期计算
一.时间和日期计算 我们在应用开发中,时常须要和时间打交道,比方获取当前时间,获取两个时间点相隔的时间等等,在iOS开发中与时间相关的类有例如以下几个: 1. NSDate:表示一个绝对的时间点 2. ...
- 算法笔记_166:算法提高 金属采集(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 人类在火星上发现了一种新的金属!这些金属分布在一些奇怪的地方,不妨叫它节点好了.一些节点之间有道路相连,所有的节点和道路形成了一棵树.一共 ...
- 算法笔记_163:算法提高 最大乘积(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入格式 第一行一个数表示数据组数 每组输入数据共2行: 第1行给出总共的数 ...
- 算法笔记_167:算法提高 矩阵翻转(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 Ciel有一个N*N的矩阵,每个格子里都有一个整数. N是一个奇数,设X = (N+1)/2.Ciel每次都可以做这样的一次操作:他从矩阵 ...
- 算法笔记_164:算法提高 最小方差生成树(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是点数和边数.接下来M行,每行三个整数U,V, ...
随机推荐
- 【概率】【找规律】hdu6229 Wandering Robots
题意:一个机器人在正方形迷宫的左上角,迷宫里有些格子有障碍物,每一步机器人会等概率地向能走的格子转移(包含自身).问你无限长的时间之后,机器人处于矩形对角线的右下方的概率. 无限长时间意味着,起点没有 ...
- 20162327WJH 实验三 《敏捷开发与XP实践》 实验报告
20162327WJH 实验三 <敏捷开发与XP实践> 实验报告 一.实验内容 1.XP基础 2.XP核心实践 3.相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<L ...
- hssworkbook 用法案例
public ActionResult excelPrint() { HSSFWorkbook workbook = new HSSFWorkbook();// 创建一个Excel文件 HSSFShe ...
- <摘录>CentOS怎么查看某个命令的源代码
安装yumdownloader工具: # yum install yum-utils 设置源: [base-src] name=CentOS-5.4 - Base src - baseurl=http ...
- IDA64 Fatal error before kernel init
http://www.tuicool.com/articles/7FZVZna 第一次看到这个错误还以为是修改文件导致的,但是觉得又不大像,因为在Win7底下是完全正常的.搜索了一下才发现是由于插件导 ...
- 我的jlink破解失败经历
http://fallenwind.spaces.eepw.com.cn/articles/article/item/59116 标题:我的jlink破解失败经历2009-07-12 01:16:56 ...
- wpf 分别用 xaml 和后台代码实现 色彩渐变
xaml 方法: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.micros ...
- 【cocos2d-x制作别踩白块儿】第九期:游戏计时功能(附源代码)
游戏没有计时,不是坑爹吗? 这一期,我们将来加入游戏计时功能. 1. 定义变量和函数 我们先在HelloWorldScene.h中定义几个变量和函数 long startTime; bool time ...
- 禁止body滚动允许div滚动防微信露底
最近遇到一个需求,页面中只有一个div允许滚动,其他内容不允许滚动. 正常来讲加上 body{height:100%;overflow: hidden;} 应该就阻止页面滚动了.可是很悲催的是手机端并 ...
- MEF 导入(Import)和导出(Export)
前言: MEF不同于其他IOC容器(如:Castle)很重要的原因在于它使用了特性化编程模型(涉及到两个概念:“特性”和“编程模型”). 特性(Attribute):举例来说就是我们在开发过程中在类上 ...