7-5 求前N天 (30 分)
输入年月日的值(均为整型数),同时输入一个取值范围在[-10,10] 之间的整型数n,输出该日期的前n天(当n > 0时)、该日期的后n天(当n<0时)。
其中年份取值范围为 [1820,2020] ,月份取值范围为[1,12] ,日期取值范围为[1,31] 。
注意:不允许使用Java中任何与日期有关的类或方法。
输入格式:
在一行中输入年月日的值以及n的值,可以用一个或多个空格或回车分隔。
输出格式:
当输入的年、月、日以及n的值非法时,输出“Wrong Format”;
当输入数据合法时,输出“n days ago is:年-月-日”
输入样例1:
在这里给出一组输入。例如:
2018 6 19 8
输出样例1:
在这里给出相应的输出。例如:
8 days ago is:2018-6-11
输入样例2:
在这里给出一组输入。例如:
2018 6 19 -8
输出样例2:
在这里给出相应的输出。例如:
-8 days ago is:2018-6-27
import java.util.Scanner;
public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);boolean f=true;int y=0,m=0,d=0,n=0;if (sc.hasNextInt())y= sc.nextInt();elsef=false;if (sc.hasNextInt())m= sc.nextInt();elsef=false;if (sc.hasNextInt())d= sc.nextInt();elsef=false;if (sc.hasNextInt())n= sc.nextInt();elsef=false;if (checkInputValidity(y,m,d,n)&&f){nextDate(y,m,d,n);}elseSystem.out.println("Wrong Format");}public static boolean isLeapYear(int year) {boolean ret=false;if ((year%100!=0&&year%4==0)||(year%400==0)){ret=true;}return ret;}public static boolean checkInputValidity(int year,int month,int day,int n){boolean ret=false;int[] mm={31,28,31,30,31,30,31,31,30,31,30,31};if (isLeapYear(year))mm[1]=29;if ((year>=1820&&year<=2020)&&(month>=1&&month<=12)&&(day>=1&&day<=mm[month-1])){//此处的month-1用来判断不同年份的不同月份的数据是否合法ret=true;}return ret;}public static void nextDate(int year,int month,int day,int n) {int[] mm={0,31,28,31,30,31,30,31,31,30,31,30,31};if (isLeapYear(year))mm[2]=29;day-=n;if (n>0){while (day<=0){//这边是读错题写的while循环,实际上n在-10到10之间,不需要循环,但是上面的判断n的条件我没有加,//也就是可以判断大于10和小于-10范围以外的n,但是没有详细去测试过,单这道题的测试点来讲是没有问题的month--;if (month==0){//这边因为是mm有0的索引,因此要提前判断是否等于0month+=12;year--;}day+=mm[month];}}else if (n<0){while (day>mm[month]) {day-=mm[month];month++;if (month==13){month-=12;year++;}}}System.out.printf("%d days ago is:%d-%d-%d\n",n,year,month,day);}
}
7-5 求前N天 (30 分)相关推荐
- 7-4 求下一天 (30 分)
** 7-4 求下一天 (30 分) ** 输入年月日的值(均为整型数),输出该日期的下一天. 其中:年份的合法取值范围为[1820,2020] ,月份合法取值范围为[1,12] ,日期合法取值范围为 ...
- Java/可逆素数/个税查询/求前N天
7-2 可逆素数 (9 分) 朴素写法,正着倒着判断一遍目标数是否是素数,比如对于53,它是一个素数,但是倒过来之后35就是合数.要得到一个数的逆序数,就是把原数的最高位变成新数的最低位,以此类推. ...
- PAT甲级1111 Online Map (30分):[C++题解]两次dijkstra求单源最短路、保存路径、长度最短、时间最短
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:dijkstra求单源最短路的题目. 只是写两遍而已,第一遍求按照路径长度求,第二遍按照时间最少求. 另外加一个vector路径的判断 ...
- PAT甲级1087 All Roads Lead to Rome (30分):[C++题解]dijkstra求单源最短路综合、最短路条数、保存路径
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 首先这是一道dijkstra算法求最短路的题目,不过此题较为复杂.首先需要将字符串城市名映射成数字,这里使用hash table 名 ...
- PAT甲级1119 Pre- and Post-order Traversals (30分):[C++题解]暴搜dfs、前序遍历和后序遍历求中序遍历
文章目录 题目分析 题目链接 题目分析 分析 给了前序遍历和后序遍历,能够确定根结点,但是左子树和右子树的长度是不确定的.这里采用的解决方案是枚举左子树的结点个数,其实右子树的结点个数也确定了.对于每 ...
- PAT甲级1115 Counting Nodes in a BST (30分):[C++题解] 递归建二叉搜索树、dfs求一层结点数量
文章目录 题目分析 题目链接 题目分析 分析 首先本题给定的二叉搜索树的定义和其他地方的不同.本题小于等于的是左子树,右子树是大于根结点的. 然后说一下做题的思路. 给定一串数据,让构造二叉搜索树. ...
- 【CCCC】L3-021 神坛 (30分)计算几何+求三角形面积(极角排序)
problem L3-021 神坛 (30分) 在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如 ...
- 任务二:实现求平方根关键算法(30 分)求 n 以内(不包括 n)同时能被 3 和 7 整除的所有自然数之和的平方根 s,然后将结果s 输出。例如若 n 为 1000 时,则 s=153.909
任务二:实现求平方根关键算法(30 分) 求 n 以内(不包括 n)同时能被 3 和 7 整除的所有自然数之和的平方根 s, 然后将结果 s 输出.例如若 n 为 1000 时,则 s=153.909 ...
- 小明放学(30分)求大佬帮忙看看哪里有问题
时间限制:1s 内存限制:512.0mb 题目背景 汉东省政法大学附属中学所在的光明区最近实施了名为"智慧光明"的智慧城市项目.具体到交通领域,通过"智慧光明" ...
最新文章
- 设计模式 之 设计的 六大原则(1)单一职责原则
- pytorch 入门基础
- umask:默认权限分配的命令
- [Unity][FlowCanvas] FlowScript 搜索功能不可用的解决办法:更新 UnityEditor 的版本
- 约瑟夫环问题——python
- VB获取windows各常用目录的函数(模块)
- 数据科学中的五种认知偏差,你都了解吗?
- Linux内核编程02:Kbuild子系统
- 紫猫插件-文件读写(1-13)
- 多功能计算机器在线,多功能数学计算器(RedCrab The Calculator)
- CRM客户管理系统源码PHP开发搭建
- 转:Beautiful Soup
- Keras LSTM实现多维输入输出时序预测实践详解
- 离散选择模型(DCM)和深度神经网络(DNN)结合
- 【Java知识点总结】Java 变量
- python 曲线拟合(numpy.polyfit、scipy.optimize.curve_fit)
- Lyapunov直接法与间接法
- 锁存器Latch和触发器Flip-flop的区别
- iOS三句话实现文本转语音:AVSpeechSynthesizer
- 1602液晶显示实验