ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

第八届蓝桥杯JavaB组省赛-日期问题

2022-02-27 21:01:54  阅读:183  来源: 互联网

标签:02 JavaB int else 蓝桥 jj new 100 组省赛


题目

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

输入

一个日期,格式是"AA/BB/CC"。 (0 <= A, B, C <= 9)

输入

输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。

样例输入

02/03/04

样例输出

2002-03-04
2004-02-03
2004-03-02

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。

思路:枚举

思路很简单,但是这个简单题写了一下午,总是出错。总结一下自己失误的原因:

  1. Date类的使用错误,构造方法new Date(int year ,int month ,int day) ,其中year是从1900年开始算起,也就代表着2022年应该用2022-1900表示,month的取值范围是0-11,day的取值范围是1-31.
  2. 对于这种日期的问题,一定不要忘了考虑闰年的问题。闰年的2月有29天,平年是28天。闰年是可以被4整除,但是不能被100整除,或者是可以被400整除。
  3. 读题不仔细!!!,真实服了题目中说可以是年月日、月日年和日月年三种情况,我写了半天六种情况,结果比标准答案多出来还几个结果。以后读什么题,一定要细心在细心,一字一句的读完它。
  4. 最后忘了查重了,输入为02/02/29,正确答案为:2029-02-02。我的输出是
    2029-02-02
    2029-02-02
    太粗心了…
    代码写的还又臭又长…
	static HashSet<String> S=new HashSet<String>();
	public static void main(String[] args) {
		
		Scanner in=new Scanner(System.in);
		String t=in.next();
		String[] tt=t.split("/");
		int a=Integer.parseInt(tt[0]);
		int b=Integer.parseInt(tt[1]);
		int c=Integer.parseInt(tt[2]);
		if(a>b&&a>c)
		{	
			f(jj(c,b,a));
			f(jj(c,a,b));
			f(jj(a,b,c));
		}
		else if(b>a&&b>c)
		{
			if(a>c)
			{
				f(jj(c,a,b));f(jj(c,b,a));f(jj(a,b,c));
			}
			else {
				f(jj(a,b,c));f(jj(c,a,b));f(jj(c,b,a));
			}
		}
		else if(b>a)
		{
			f(jj(a,b,c));f(jj(c,a,b));f(jj(c,b,a));
		}
		else {
			f(jj(a,b,c));f(jj(c,b,a));f(jj(c,a,b));
		}
	}
	
	static String jj(int a,int b,int c)
	{
		Format d=new SimpleDateFormat("yyyy-MM-dd");
		int t=0;
		if(a>=60)
			if((19*100+a)%4==0&&(19*100+a)%100!=0||(19*100+a)%400==0)
				t=29;
			else 
				t=28;
		else 
			if((20*100+a)%4==0&&(20*100+a)%100!=0||(20*100+a)%400==0)
				t=29;
			else 
				t=28;
		if(b>12||c>31||b==0||c==0) return "";
			if(b==1||b==3||b==5||b==7||b==8||b==10||b==12)
			{
				if(c<=31)
				{
					if(a>=60)
						return d.format(new Date(19*100+a-1900, b-1, c));
					else 
						return d.format(new Date(20*100+a-1900, b-1, c));
				}
				
			}
			else if(b==2)
			{
				if(c<=t)
					if(a>=60)
						return d.format(new Date(19*100+a-1900, b-1, c));
					else 
						return d.format(new Date(20*100+a-1900, b-1, c));
			}
			else if(b!=0)
			{
				if(c<=30)
					if(a>=60)
						return d.format(new Date(19*100+a-1900, b-1, c));
					else 
						return d.format(new Date(20*100+a-1900, b-1, c));
			}
		return "";
	}
	static void f(String s)
	{
		if(!s.equals("")&&!S.contains(s))
		{
			S.add(s);
			System.out.println(s);
		}
			
	}

标签:02,JavaB,int,else,蓝桥,jj,new,100,组省赛
来源: https://blog.csdn.net/m0_52238102/article/details/123170004

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有