zoukankan      html  css  js  c++  java
  • 【蓝桥杯训练】第一天1251

    1251

    [蓝桥杯2015初赛]星系炸弹

    在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
    每个炸弹都可以设定多少天之后爆炸。
    比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
    有一个贝塔炸弹,a年b月c日放置,定时为n天,请你计算它爆炸的准确日期。
    输入
    输入存在多组数据,每组数据输入一行,每一行输入四个正整数a,b,c,n
    输入保证日期在1000-01-01到2020-01-01之间,且日期合法。
    n不超过1000
    输出
    请填写该日期,格式为 yyyy-mm-dd 即4位年份2位月份2位日期。比如:2015-02-19
    请严格按照格式书写。不能出现其它文字或符号。
    样例输入 Copy
    2015 1 1 15
    2014 11 9 1000
    样例输出 Copy
    2015-01-16
    2017-08-05
    提示
    题目已改编。

    注意

    1. 理清头绪,用笔和纸去画一画
    2. 善于创建可复用的函数函数
    3. 闰年为:四年一闰,两百年不闰,四百年闰

    算法

    python v1.0:

    1. 按照月份处理
    2. 创建isLeap(),用于判断闰年
    3. 创建T(),通过参数,m、y确定当月天数

    python v2.0、C++ v1.0:

    1. 模拟计时器,循环加一计时,时间复杂度O(n),取决于n
    2. C++ 中注意使用printf("%02d",d)来控制输出

    能够说明的是:代码长些,速度快些qwq,第一种按每月每月的减,当n越来越大,两种算法速度都差不多

    题解

    python v1.0:

    def isLeapYear(year):#四年一闰,两百年不闰,四百年闰
        if (not year % 100 == 0) and (year % 4 == 0) or (year % 400 == 0):
            return True
     
    def T(m, y):
        is31Day = [1,3,5,7,8,10,12]
        if m in is31Day:
            return 31
        elif m == 2:
            if isLeapYear(y):
                return 29
            else:
                return 28
        else:
            return 30
     
    def main(data):
        y, m, d, n = map(int,data.split(' '))
        acc = 0
        acc = d + n
        while True:
            if T(m, y) == 31:
                if acc <= 31:
                    d = acc
                    break
                else:
                    acc = acc - 31
                    if m == 12:
                        y = y + 1
                        m = 1
                    else:
                        m = m + 1
            if T(m, y) == 30:
                if acc <= 30:
                    d = acc
                    break
                else:
                    m = m + 1
                    acc = acc - 30
            if T(m, y) == 29:
                if acc <= 29:
                    d = acc
                    break
                else:
                    m = m + 1
                    acc = acc - 29
            if T(m, y) == 28:
                if acc <= 28:
                    d = acc
                    break
                else:
                    m = m + 1
                    acc = acc - 28
        #print(acc)
        print('{:}-{:0>2}-{:0>2}'.format(y,m,d))
    while True:
        main(input())
    

    python v2.0:

    def isLeapYear(year):#四年一闰,两百年不闰,四百年闰
        if (not year % 100 == 0) and (year % 4 == 0) or (year % 400 == 0):
            return True
        else:
            return False
     
    def main(data):
        D = [31,28,31,30,31,30,31,31,30,31,30,31]
        y, m, d, n = map(int,data.split(' '))
        if isLeapYear(y):
            D[1] = 29
        for i in range(n):
            d = d + 1
            if d > D[m-1]:
                d = 1
                m = m + 1
            if m > 12:
                m = 1
                y = y + 1
            if isLeapYear(y):
                D[1] = 29
            else:
                D[1] = 28   
        print('{:}-{:0>2}-{:0>2}'.format(y,m,d))
    while True:
        main(input())
    

    c++ v1.0:

    #include<iostream>
    using namespace std;
    int f(int x){
        if(x%4==0&&x%100!=0||x%400==0)
            return 1;
        else return 0;
    } 
    int d[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int main(){
        int a,b,c,n;
        while(cin>>a>>b>>c>>n){
            for(int i=1;i<=n;i++){
                if(f(a)) d[1]=29;
                else d[1]=28;
                if(++c>d[b-1]) {c=1;b++;}
                if(b>12){
                    b=1;
                    ++a; }
        }
        printf("%d-%02d-%02d
    ",a,b,c);
        } 
        return 0;
    }
    /**************************************************************
        Problem: 1251
        User: yanshanbei
        Language: C++
        Result: 正确
        Time:0 ms
        Memory:2084 kb
    ****************************************************************/
    
  • 相关阅读:
    How to Create a site at the specified URL and new database (CommandLine Operation)
    Using Wppackager to Package and Deploy Web Parts for Microsoft SharePoint Products and Technologies
    SQL Server Monitor v0.5 [Free tool]
    How to build Web Part
    Deploy web part in a virtual server by developing a Web Part Package file(.cab)
    How to recreate "sites" link if you delete it accidentally
    SharePoint Portal Server管理匿名访问设置
    Monitor sql connection from .Net SqlClient Data Provider
    Brief installation instruction of Sharepoint Portal Server
    How to Use SharePoint Alternate URL Access
  • 原文地址:https://www.cnblogs.com/yanshanbei/p/12207739.html
Copyright © 2011-2022 走看看