50求助(因为还没学很长时间所以可能太高级的用法不懂)

P1167 刷题

Theadora @ 2021-11-21 21:09:06

#include<bits/stdc++.h>
using namespace std; 
bool runnian(int n)//计算年份是否为闰年 
   {
        if((n%4==0&&n%100!=0)||n%400==0)
        return true;
   }    
int month(int m,int n)//计算m年份的n月有多少天 
    {
        int result=30;
        if(n==2)
        {
            if(runnian(m))
            {
                result=29;
            }
            else
            {
                result=28;
            }
        }
        else if(n==1||n==3||n==5||n==7||n==8||n==10||n==12)
        {
            result=31;
        }
        return result;
    }
    //定义结构 
struct Time{
    int yyyy;
    int mm;
    int dd;
    int hh;
    int min;
};

int main()
{
    struct Time time[2];
    int N;
    cin>>N;
    int i;
    int count=0;//能做多少题 
    long long int sum=0;    //多少分钟 
    int minute[i];//每一道题需要的分钟数 

    for(i=0;i<N;i++)
    {
        cin>>minute[i];
    }

    for(i=0;i<N;i++)
    {
        for(int j=0;j<N-i-1;j++)
        {
            if(minute[j]>minute[j+1])
            {
                int temp=minute[j];
                minute[j]=minute[j+1];
                minute[j+1]=temp;
            }
        }
    }

    for(i=0;i<2;i++)//输入数据 
    {
        scanf("%d-%d-%d-%d:%d",&time[i].yyyy,&time[i].mm,&time[i].dd,&time[i].hh,&time[i].min);
    }

    //以下计算从time【0】到time【1】年一共有多少分钟(包含time【0】,time【1】) 
    int run=0,norun=0;//闰年和非闰年初始化 
    if(time[1].yyyy==time[0].yyyy)
    {
        if(runnian(time[1].yyyy))
        {
            sum+=366*24*60;//闰年的话分钟数+366*24*60 
        }
        else
        {
            sum+=365*24*60;//非闰年的话分钟数+365*24+60 
        }
    }
    else if(time[1].yyyy>time[0].yyyy)
    {
        for(i=time[0].yyyy;i<=time[1].yyyy;i++)
        {
            if(runnian(i))
            {
                run++;
            }
            else
            {
                norun++;
            }
            sum+=run*366*24*60+norun*365*24*60;
        }
    }

    //以下计算从一月到time【0】月(不包含time【0】月)的分钟数,用sum减掉    
    for(i=1;i<time[0].mm;i++)
    {
        if(i==2)
        {
            if(runnian(time[0].yyyy))
            {
                sum-=29*24*60;
            }
            else
            {
                sum-=28*24*60;
            }
        }
        else if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
        {
            sum-=31*24*60;
        }
        else
        {
            sum-=30*24*60;
        }
    }

    //以下计算从time【1】月到12月(不包含time【01】月)的分钟数,用sum减掉    
    for(i=time[1].mm+1;i<=12;i++)
    {
        if(i==2)
        {
            if(runnian(time[1].yyyy))
            {
                sum-=29*24*60;
            }
            else
            {
                sum-=28*24*60;
            }
        }
        else if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
        {
            sum-=31*24*60;
        }
        else
        {
            sum-=30*24*60;
        }
    }   

    //以下计算从一日到time【0】日(不包含time【0】日)的分钟数,用sum减掉    
    for(i=1;i<time[0].dd;i++)
    {
        sum-=24*60;
    }
    //减掉time【0】日时间之前的分钟数 
    sum-=(time[0].hh*60+time[0].min);

    //以下计算从time【0】日到该月最后一日(不包含time【0】日)的分钟数,用sum减掉    
    for(i=time[1].dd+1;i<=month(time[1].yyyy,time[1].mm);i++)
    {
        sum-=24*60;
    }
    //减掉time【1】日时间到第二天之前的分钟数 
    sum-=(24*60-time[1].hh*60-time[1].min);

    for(i=0;i<N;i++)
    {
        sum-=minute[i];//每次减掉第i题的分钟数 
        if(sum>=0)
        count++;
        else if(sum<0)
        break;
    }
    cout<<count;
    return 0;
}

|