我是靠谱客的博主 激昂微笑,最近开发中收集的这篇文章主要介绍PAT 乙级 1028,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一开始我是用string字符串做的,但只得到15分,最后是运算超时。

贴一下代码:

#include<iostream>
#define maxn 100005 
using namespace std;
struct nood{
	string name;
	string days;
	int num; 
};

int main()
{
	int n;
	nood c[maxn];
	cin>>n;
	//string s;
	//string s1="2014/09/06",s2="1814/09/06";
	int m=0;
	int q,p;
	string ymin="9999/99/99",ymax="0000/00/00";
	for(int i=0;i<n;i++)
	{
		//scanf("%s",c[i].name); 
		cin>>c[i].name;
		cin>>c[i].days;
		//c[i].days=s;
		if(c[i].days>s1||c[i].days<s2)
		{
		  m++;
		}
		else{
			if(c[i].days>ymax)
			{
				ymax=c[i].days;
				q=i;
			}
			if(c[i].days<ymin)
			{
				ymin=c[i].days;
				p=i;
			}
		}
    }
	cout<<n-m<<" "<<c[p].name<<" "<<c[q].name<<endl;
	return 0;
}
后来看到大神用一种方法,把字符串变成一个数,这样,题目好解太多,不用再管有多少天了,是不是润年等等。

ac要注意可能一个人都不符合条件。

贴上代码:

#include<iostream>
#define maxn 100005
using namespace std;
struct nood{
	string name;
	int year,month,day;
};
nood c[maxn];
int main()
{
	int n;
	cin>>n;
	int m=0;
	int max=20140906;
	int min=18140906;
	int maxium=0;
	int minium=99999999;
	int q,p;
	for(int i=0;i<n;i++)
	{
		cin>>c[i].name;
		
		scanf("%d/%d/%d",&c[i].year,&c[i].month,&c[i].day);
		int g=(c[i].year*10000+c[i].month*100+c[i].day);
		if(g>max||g<min)
		  m++;
		else
		{
			if(g>maxium)
			{
				q=i;
				maxium=g;
			}
			if(g<minium)
			{
				p=i;
				minium=g;
			}
		}  
	}
	if(n-m!=0)
	  cout<<n-m<<" "<<c[p].name<<" "<<c[q].name<<endl;
	else
	  cout<<"0"<<endl;  
	return 0;
}




最后

以上就是激昂微笑为你收集整理的PAT 乙级 1028的全部内容,希望文章能够帮你解决PAT 乙级 1028所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部