2015年第六届蓝桥杯省赛真题之二星系炸弹

来源:互联网 发布:剑灵萝莉捏脸数据 编辑:程序博客网 时间:2024/05/16 06:47


这套真题是我在csdn上找到的,链接在此 2015年第六届蓝桥杯省赛真题

虽然原博客主是c++类别的,我是java的,但是完全不影响,所有题目都已用java实现,随便吐槽一下原博客主,第四题肯定是被你吃了!再见

2.问题描述:星系炸弹

在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。

每个炸弹都可以设定多少天之后爆炸。

比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。

有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。

请填写该日期,格式为 yyyy-mm-dd  即4位年份2位月份2位日期。比如:2015-02-19

请严格按照格式书写。不能出现其它文字或符号。

思路:此题,我没有编程,而是进行手算。已知当前日期为2014-11-09,定时为1000天,2015不是闰年,1000-365=635,日期为2015-11-09;2016年是闰年(能被4整除但不能被100整除),635-366=269,日期为2016-11-09;266不满一年,所以接下来按月做减法,11月30天,12月31天,1月31天,2月28天,3月31天,4月30天,5月31天,6月30天,7月31天,269-30-31-31-28-31-30-31-30=27,日期为2017-07-09;27-22=5,日期为2017-07-31;最后日期为2017-08-05。

评解:此题原博客主没有编程,这种直接输出答案的应该是不能通过的吧?

         这题难度不大,逻辑不是很复杂,关键在于选择分支有点多,容易搞混,先减去年,年要区分闰年和普通年。然后是月,月要区分大月小月,闰二月和普通二月,然后十二月要进年,同时月份归一。最后是天数,天数进位要判断是大月、小月、闰二月、普通二月。

代码:

public class two星系炸弹 {    public static void main(String[] args) {        //nian表示年份,yue表示月份,tian表示天数,dingshi表示剩余天数,初始时间是2014年11月9号        int nian=2014, yue=11, tian=9, dingshi=1000;        while (dingshi >= 365) {//先增加年份            if ((nian+1)%4 == 0 && (nian+1)%100 != 0) {//是否是闰年                if (dingshi < 366) tian--;                dingshi -= 366;                nian++;            } else {                dingshi -= 365;                nian++;            }        }        while (dingshi >= 28) {//再增加月份            if (yue==1 || yue==3 || yue==5 || yue==7 || yue==8 || yue==10) {//大月                if (dingshi < 31) break;                yue++;dingshi -= 31;            }else if(yue==4 || yue==6 || yue==9 || yue==11){//小月                if (dingshi < 30) break;                yue++;dingshi -= 30;            }else if(yue == 2 && (nian+1)%4 == 0 && (nian+1)%100 != 0){//闰年2月                if (dingshi < 29) break;                yue++;dingshi -= 29;            }else if(yue == 2){//普通2月                yue++;dingshi -= 28;            }else {//12月                if (dingshi < 31) break;                nian++;dingshi -= 31;yue=1;            }        }        while (dingshi >0) {//最后增加天数            dingshi--;            if (tian+1 > 28 && yue == 2 && !(nian%4 == 0 && nian%100 != 0)) {//普通2月                yue++; tian = 1;            }else if(tian+1 > 29 && yue == 2 && (nian%4 == 0 && nian%100 != 0)){//闰年2月                yue++;tian = 1;            }else if(tian+1 > 30 && (yue==4 || yue==6 || yue==9 || yue==11)){//小月                yue++;tian = 1;            }else if(tian+1 > 31 && (yue==1 || yue==3 || yue==5 || yue==7 || yue==8 || yue==10)){//大月                yue++;tian = 1;            }else if(tian+1 > 31 && yue==12){//12月                nian++;yue = 1;tian = 1;            }else {//不进月                tian++;            }        }        System.out.println(nian+"-"+yue+"-"+tian);    }}


0 0
原创粉丝点击