50求助(因为还没学很长时间所以可能太高级的用法不懂)
  • 板块P1167 刷题
  • 楼主Theadora
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/11/21 21:09
  • 上次更新2023/11/3 23:47:03
查看原帖
50求助(因为还没学很长时间所以可能太高级的用法不懂)
613337
Theadora楼主2021/11/21 21:09
#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;
}
2021/11/21 21:09
加载中...