• 江西财经大学第一届程序设计竞赛 B


    链接:https://www.nowcoder.com/acm/contest/115/B
    来源:牛客网

    题目描述

    给出一个出生日期,比如:1999-09-09,
    问:从出生那一天开始起,到今天2018-04-21为止(包括出生日期和今天),有多少天,年月日都不包含数字4?

    输入描述:

    第一行输入一个整数T(表示样例个数)
    接下来T组样例
    每个样例一行,包含一个字符串“yyyy-mm-dd”(1990<=yyyy<=2018)
    题目保证测试数据的正确性

    输出描述:

    输出题意要求的天数
    示例1

    输入

    1
    1999-09-09

    输出

    5020
    是我写长了...
    #include<iostream>
    #include<string>
    #include<stdio.h>
    #include<map>
    using namespace std;
    map<int,int>Mp;
    int main(){
        Mp[1]=1;Mp[2]=1;
        Mp[3]=1;Mp[5]=1;
        Mp[6]=1;Mp[7]=1;Mp[8]=1;
        Mp[9]=1;Mp[10]=1;Mp[11]=1;
        Mp[12]=1;Mp[13]=1;
        Mp[15]=1;Mp[16]=1;
        Mp[17]=1;Mp[18]=1;
        Mp[19]=1;Mp[20]=1;Mp[21]=1;
        Mp[22]=1;Mp[23]=1;Mp[25]=1;
        Mp[26]=1;Mp[27]=1;
        Mp[28]=1;Mp[29]=1;Mp[30]=1;Mp[31]=1;
        Mp[1990]=1;Mp[1992]=1;
        Mp[1993]=1;Mp[1995]=1;
        Mp[1996]=1;Mp[1997]=1;Mp[1998]=1;
        Mp[1999]=1;Mp[2000]=1;Mp[2001]=1;
        Mp[2002]=1;Mp[2003]=1;
        Mp[2005]=1;Mp[2006]=1;
        Mp[2007]=1;Mp[2008]=1;
        Mp[2009]=1;Mp[2010]=1;
        Mp[2010]=1;Mp[2011]=1;Mp[2012]=1;Mp[2013]=1;
        Mp[2015]=1;Mp[2016]=1;Mp[2017]=1;Mp[2018]=1;
        int t;
        int y,m,d;
        cin>>t;
        while(t--){
            int sum=0;
            scanf("%d-%d-%d",&y,&m,&d);
            int f=0;
            int ans=d;
            for(int j=m;j<=12;){
                    int flag=0;
                    int flag2=0;
                    if(Mp[y]&&Mp[j]&&Mp[ans]){
                        sum++;
                    }
                   // cout<<ans<<endl;
                    if(y%4==0){
                        if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){
                            if(ans==31){
                                flag2=1;
                                flag=1;
                            }
                        }else if(j==2){
                            if(ans==29){
                                flag2=1;
                                flag=1;
                            }
                        }else{
                            if(ans==30){
                                flag2=1;
                                flag=1;
                            }
                        }
                    }else if(y%4){
                        if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){
                            if(ans==31){
                                flag2=1;
                                flag=1;
                            }
                        }else if(j==2){
                            if(ans==28){
                                flag2=1;
                                flag=1;
                            }
                        }else{
                            if(ans==30){
                                flag2=1;
                                flag=1;
                            }
                        }
                    }
                   // cout<<m<<" "<<ans<<endl;
                    if(flag==1){
                        ans=1;
                    }else{
                        ans++;
                        //cout<<"A"<<endl;
                    }
                    if(flag2){
                        j++;
                    }
            }
            d=1;
            for(int i=y+1;i<=2018;){
                for(int j=1;j<=12;){
                    int flag=0;
                    int flag2=0;
                    if(Mp[i]&&Mp[j]&&Mp[d]){
                        sum++;//cout<<i<<"-"<<j<<"-"<<d<<" "<<sum<<endl;
                    }
                    if(i==2018&&j==4&&d==21){
                        f=1;
                        break;
                    }
    
                    if(i%4==0){
                        if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){
                            if(d==31){
                                flag2=1;
                                flag=1;
                            }
                        }else if(j==2){
                            if(d==29){
                                flag2=1;
                                flag=1;
                            }
                        }else{
                            if(d==30){
                                flag2=1;
                                flag=1;
                            }
                        }
                    }else if(i%4){
                        if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){
                            if(d==31){
                                flag2=1;
                                flag=1;
                            }
                        }else if(j==2){
                            if(d==28){
                                flag2=1;
                                flag=1;
                            }
                        }else{
                            if(d==30){
                                flag2=1;
                                flag=1;
                            }
                        }
                    }
    
                    if(j==12&&d==31){
                        i++;
                    }
                   // cout<<flag<<endl;
                    if(flag==1){
                        d=1;
                    }else{
                        d++;
                        //cout<<"A"<<endl;
                    }
                    if(flag2){
                        j++;
                    }
                }
                if(f){
                    break;
                }
            }
            cout<<sum<<endl;
        }
        return 0;
    }
  • 相关阅读:
    约合¥1720 LG法国称G Watch将于6月开卖
    c语言中的位移位操作
    兼容的动态加载JS【原】
    Oracle 10g AND Oracle 11g手工建库案例--Oracle 10g
    面向对象思想----不看懊悔!
    学习设计模式--观察者模式(C++)
    使用POI 导入excel
    机器学习 F1-Score, recall, precision
    阿里无线11.11:手机淘宝移动端接入网关基础架构演进之路
    ICE 迁移64位安装问题
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/8904096.html
Copyright © 2020-2023  润新知