2022蓝桥杯javaC省赛 试题 特殊时间

编程入门 行业动态 更新时间:2024-10-09 13:33:27

2022蓝桥杯javaC省赛 <a href=https://www.elefans.com/category/jswz/34/1769882.html style=试题 特殊时间"/>

2022蓝桥杯javaC省赛 试题 特殊时间

嗨,大家好,我是小萝卜算子。(微信公众号:数据仓库践行者。感谢关注)
目前正在带领小伙伴们阅读spark源码,有兴趣的小伙伴可以私信我,获取大数据进阶的相关视频哦。

简介

最开始是在CSDN问答区,碰到了这个题目,后来发现这个是蓝桥杯里面的一道题目。

题目


2022 年 2 月 22 日 22:20 是一个很有意义的时间
年份为 2022,                  由 3 个 2  和 1 个 0 组成
如果将月和日写成 4 位,为 0222,也是由 3 个 2 和 1 个 0 组成
如果将时间中的时和分写成 4 位, 还是由 3 个 2 和 1 个 0 组成。
小蓝对这样的时间很感兴趣,他还找到了其它类似的例子
比如:	 111 年 10月 11 日 01:11,2202 年 2 月 22 日 22:02 等等。
请问,总共有多少个时间是这种年份写成 4 位、月日写成 4 位、时间写成 4 位由 3 个一种数字和 1 个另一种数字组成。
注意 1111 年 11 月 11 日 11:11不算,因为它里面没有两种数字。

感觉这道题挺有意思,对于开发人员的逻辑思维是一种考验,为此,我专门写了回答(代码并未优化)
有想法的小伙伴可以一起尝试一下哦

最终结果 212种可能

0+1的结果共有64种
0+2的结果共有16种
1+2的结果共有64种
1+3的结果共有12种
1+4的结果共有12种
1+5的结果共有12种
1+6的结果共有8种
1+7的结果共有8种
1+8的结果共有8种
1+9的结果共有8种
符合的结果如下

111011101110
111011101101
111011101011
111011100111
111011011110
111011011101
111011011011
111011010111
111010111110
111010111101
111010111011
111010110111
111001111110
111001111101
111001111011
111001110111
110111101110
110111101101
110111101011
110111100111
110111011110
110111011101
110111011011
110111010111
110110111110
110110111101
110110111011
110110110111
110101111110
110101111101
110101111011
110101110111
101111101110
101111101101
101111101011
101111100111
101111011110
101111011101
101111011011
101111010111
101110111110
101110111101
101110111011
101110110111
101101111110
101101111101
101101111011
101101110111
011111101110
011111101101
011111101011
011111100111
011111011110
011111011101
011111011011
011111010111
011110111110
011110111101
011110111011
011110110111
011101111110
011101111101
011101111011
011101110111
222002222220
222002222202
222002222022
222002220222
220202222220
220202222202
220202222022
220202220222
202202222220
202202222202
202202222022
202202220222
022202222220
022202222202
022202222022
022202220222
111211121112
111211121121
111211121211
111211122111
111211211112
111211211121
111211211211
111211212111
111212111112
111212111121
111212111211
111212112111
112111121112
112111121121
112111121211
112111122111
112111211112
112111211121
112111211211
112111212111
112112111112
112112111121
112112111211
112112112111
121111121112
121111121121
121111121211
121111122111
121111211112
121111211121
121111211211
121111212111
121112111112
121112111121
121112111211
121112112111
211111121112
211111121121
211111121211
211111122111
211111211112
211111211121
211111211211
211111212111
211112111112
211112111121
211112111211
211112112111
222112222221
222112222212
222112222122
222112221222
221212222221
221212222212
221212222122
221212221222
212212222221
212212222212
212212222122
212212221222
122212222221
122212222212
122212222122
122212221222
111311131113
111311131131
111311131311
113111131113
113111131131
113111131311
131111131113
131111131131
131111131311
311111131113
311111131131
311111131311
111411141114
111411141141
111411141411
114111141114
114111141141
114111141411
141111141114
141111141141
141111141411
411111141114
411111141141
411111141411
111511151115
111511151151
111511151511
115111151115
115111151151
115111151511
151111151115
151111151151
151111151511
511111151115
511111151151
511111151511
111611161116
111611161611
116111161116
116111161611
161111161116
161111161611
611111161116
611111161611
111711171117
111711171711
117111171117
117111171711
171111171117
171111171711
711111171117
711111171711
111811181118
111811181811
118111181118
118111181811
181111181118
181111181811
811111181118
811111181811
111911191119
111911191911
119111191119
119111191911
191111191119
191111191911
911111191119
911111191911

我的作答

 import java.util.ArrayList;
import java.util.List;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;public class riqi{public static void main(String[] args) {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");//严格计算日期//如果不写这个,那么  222322232223 会通过SimpleDateFormat.parse 不会被catchsdf.setLenient(false);List<String> resultList=new ArrayList<>();//先看看 两个不同的数字有多少种组合for(int i=0;i<10;i++){//0001 0010 0100 1000//1110 1101 1011 0111//共有这8种情况//下面分为两个for循环来讨论,哪个数是3个,哪个数是1个//两个for循环可以提出去坐公共方法,避免冗余,在这里为了说明效果,就不进行分离了for(int j=i+1;j<10;j++){List<String> list=new ArrayList<>();list.add(i+""+i+""+i+""+j);list.add(i+""+i+""+j+""+i);list.add(i+""+j+""+i+""+i);list.add(j+""+i+""+i+""+i);//因为是由  年    月日   时分  三个组成,所以直接做了3个for循环用来拼接for(int m=0;m<list.size();m++){for(int n=0;n<list.size();n++){for(int p=0;p<list.size();p++){//这里借用SimpleDateFormat来判断是否是正常时间String date=list.get(m)+list.get(n)+list.get(p);try {sdf.parse(date);} catch (ParseException e) {//遇到非正常时间直接跨过,continue;}//正确的时间给添加到list中,用来统计resultList.add(date);}}}//和上面的情况同理list=new ArrayList<>();list.add(j+""+j+""+j+""+i);list.add(j+""+j+""+i+""+j);list.add(j+""+i+""+j+""+j);list.add(i+""+j+""+j+""+j);for(int m=0;m<list.size();m++){for(int n=0;n<list.size();n++){for(int p=0;p<list.size();p++){String date=list.get(m)+list.get(n)+list.get(p);try {sdf.parse(date);} catch (ParseException e) {continue;}resultList.add(date);}}}}}//最后打印一下效果System.out.println(resultList.size());for(int i=0;i<resultList.size();i++){System.out.println(resultList.get(i));}}}

欢迎大家都来尝试哦,有更好的解答方法可以发表一下

更多推荐

2022蓝桥杯javaC省赛 试题 特殊时间

本文发布于:2024-02-06 05:43:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1746587.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:试题   时间   蓝桥杯   省赛   javaC

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!