ACM 第十一届 河南省省赛A题 计划日
一、题目描述如下:

二、思路分析
其实这个如果是一个填空题,可以直接用Excel快速计算出来,反而用代码比较麻烦
说一下我的代码的思路:
1.如果N大于本月剩下的天数,就先从N天里减去本月剩下的天数,
2.如果剩下的N天大于本年剩下的天数,就从N天里减去本年剩下的天数,这时候日期为YYYY+1年 1月 1日
3.因为闰年每四年一次,可以从N里面减去k个365*3+366天,直到N小于365*3+366,这时日期为YYYY+1+k年 1月 1日
4.从N里面减去t个当前年的天数(平年为365,闰年为366),直到N小于当前年的天数,这时候日期为YYYY+1+k+t年 1月 1日
5.从N里面减去p个月的天数,直到剩下的N不够本月的天数,这时候就能得到最后的日期为YYYY+1+k+t年 p月 N日
6.星期很好算,直接用(W+N)%7就能得到最后的星期
三、根据思路,Java代码如下(如有其他思路,恭请各位大佬评论区评论,我觉得我的思路太麻烦)
import java.util.Scanner;
public class Main1 {
static Scanner sc = new Scanner(System.in);
static int j = sc.nextInt();
static String str;
static int year,month,day,w,N,m,monthDay;
static int temp = 366+365*3;
public static void main(String[] args) {
for (int i = 0; i < j; i++) {
str = sc.next();
year = Integer.parseInt(str.substring(0, 4));
month = Integer.parseInt(str.substring(4,6));
day = Integer.parseInt(str.substring(6,8));
w =sc.nextInt();
N = (int) sc.nextLong();
m = (int) (N/temp);
w = (w+N)%7;//6.星期很好算,直接用(W+N)%7就能得到最后的星期
days();//1.如果N大于本月剩下的天数,就先从N天里减去本月剩下的天数,
months();//2.如果剩下的N天大于本年剩下的天数,就从N天里减去本年剩下的天数,这时候日期为YYYY+1年 1月 1日
years();//3.因为闰年每四年一次,可以从N里面减去k个365*3+366天,直到N小于365*3+366,这时日期为YYYY+1+k年 1月 1日
year();//4.从N里面减去t个当前年的天数(平年为365,闰年为366),直到N小于当前年的天数,这时候日期为YYYY+1+k+t年 1月 1日
months();//5.从N里面减去p个月的天数,直到剩下的N不够本月的天数,这时候就能得到最后的日期为YYYY+1+k+t年 p月 N日
System.out.println(year+""+String.format("%02d", month)+""+String.format("%02d", day)+" "+w);
} } //从N里面减去本月剩下的天数
static void days(){
monthDay = getdays(year,month);
if(day+N>monthDay){
N=N+day-monthDay-1;
day=1;
month++;
}else{
day+=N;
N=0;
}
} //从N里面减去p月的天数,直到N小于本月天数或者月数大于12
static void months(){
monthDay = getdays(year,month);
while(month<=12 && N>=monthDay){
if(N==0){
break;
}else{
month++;
day=1; if(N>=monthDay)
N-=monthDay;
else{
day=N;
break;
}
}
}
if(month==13){
month=1;
year++;
}else{
day+=N;
N=0;
} } //从N里面减去k个四年
static void years(){
while(N>temp){
year+=4;
N-=temp;
}
} //从N里面减去当前年的天数,直到N小于当前年的天数
static void year(){
int nowyear = getYear(year);
while(N>=nowyear){
year++;
N-=nowyear;
nowyear = getYear(year);
}
} //判断是否是闰年
static boolean jugeYear(int year){
if(year %4==0&&year%100!=0 || year%400==0)
return true;
return false;
} //获取当前年的天数
static int getYear(int year){
int nowyear = 365;
if(jugeYear(year))
nowyear = 366;
return nowyear;
} //获取当前月的天数
static int getdays(int year,int month){
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
return 31;
else if(month==4 || month==6 || month==9 || month==11 )
return 30;
else{
if(jugeYear(year))
return 29;
else
return 28;
}
}
}
ACM 第十一届 河南省省赛A题 计划日的更多相关文章
- Checkpoints(第十一届河南省省赛真题)
题目描述 As a landlocked country in central and southern Africa , the political situation has been relat ...
- 求XF+闭包(第十一届河南省省赛真题)
题目描述 如何设计一个好的数据库不仅仅是一个理论研究问题,也是一个实际应用问题.在关系数据库中不满足规范化理论的数据库设计会存在冗余.插入异常.删除异常等现象. 设R(U)是一个关系模式,U={ A1 ...
- Substrings 第37届ACM/ICPC 杭州赛区现场赛C题(hdu 4455)
http://acm.hdu.edu.cn/showproblem.php?pid=4455 https://icpcarchive.ecs.baylor.edu/index.php?option=c ...
- hdu 4431 第37届ACM/ICPC 天津赛区现场赛A题 枚举
题意:就是给了13张牌.问增加哪些牌可以胡牌.m是数字,s是条,p是筒,c是数字 胡牌有以下几种情况: 1.一个对子 + 4组 3个相同的牌或者顺子. 只有m.s.p是可以构成顺子的.东西南北这样 ...
- ACM 2015年上海区域赛A题 HDU 5572An Easy Physics Problem
题意: 光滑平面,一个刚性小球,一个固定的刚性圆柱体 ,给定圆柱体圆心坐标,半径 ,小球起点坐标,起始运动方向(向量) ,终点坐标 ,问能否到达终点,小球运动中如果碰到圆柱体会反射. 学到了向量模板, ...
- hdu 4438 第37届ACM/ICPC 天津赛区现场赛H题
题意:Alice和Bob两个人去打猎,有两种(只)猎物老虎和狼: 杀死老虎得分x,狼得分y: 如果两个人都选择同样的猎物,则Alice得分的概率是p,则Bob得分的概率是(1-p): 但是Alice事 ...
- zoj 3659 第37届ACM/ICPC 长春赛区现场赛E题 (并查集)
题意:给出一棵树,找出一个点,求出所有点到这个点的权值和最大,权值为路径上所有边权的最小值. 用神奇的并查集,把路按照权值从大到小排序,然后用类似Kruskal的方法不断的加入边. 对于要加入的一条路 ...
- sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)
The Android University ACM Team Selection Contest Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里 ...
- Sdut 2409 The Best Seat in ACM Contest(山东省第三届ACM省赛 H 题)(模拟)
题目描述 Cainiao is a university student who loves ACM contest very much. It is a festival for him once ...
随机推荐
- JAVA EE 第二周(XML简述以及web请求的过程)
一. 对于XML,我分别从以下几个方面来简述: 1.定义: XML是一种可扩展的标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. (可扩展标记语言:可扩展标记语言是一 ...
- Numpy 和 Matplotlib库的学习笔记
Numpy介绍 一个用python实现的科学计算,包括:1.一个强大的N维数组对象Array:2.比较成熟的(广播)函数库:3.用于整合C/C++和Fortran代码的工具包:4.实用的线性代数.傅里 ...
- 各种CSS样式设置细线边框
基础知识回顾 : cellspacing:单元格与单元格之间的边距:cellpadding:单元格内的内容与单元格边沿的边距 简单实用的样式,设置所有的单元格为细线效果 <style type= ...
- centos7救援模式--误删/usr/bin/恢复
模拟场景 centos7 误删/usr/bin/等系统内置文件夹, 导致几百个内置命令丢失. 修复 rescue模式 vm模拟一遍(如果在物理机, 可通过U盘方式直接开机U盘进入选择救援模式, 方式通 ...
- [c/c++] programming之路(31)、位运算(二)
一.取反的高级用法 #include<stdio.h> #include<stdlib.h> //取反的作用:末位清零 取反适用于各种位数不同的数据 void main0(){ ...
- CEF C++调用前端js方法展示传递过来的图片数据
转载:https://blog.csdn.net/lengyuezuixue/article/details/79769103 在项目开发过程中遇到一个需求,通过C++调用js方法传参给前端显示图片, ...
- 机器学习总结(八)决策树ID3,C4.5算法,CART算法
本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...
- mongodb常用查询语句
1.查询所有记录db.userInfo.find();相当于:select* from userInfo; 2.查询去掉后的当前聚集集合中的某列的重复数据db.userInfo.distinct(&q ...
- LaTex 使用特殊章节符号 (§)
参考: LaTex 使用特殊章节符号 (§) LaTex 使用特殊章节符号 (§) 在.tex文件开头,加上以下内容: \usepackage[utf8]{inputenc} \usepackage{ ...
- Exception in thread "main" org.apache.ibatis.binding.BindingException: Type interface com.test.bean.groupMapper is not known to the MapperRegistry.
Exception in thread "main" org.apache.ibatis.binding.BindingException: Type interface com. ...