题意:给你n个人的姓名和他们开始时间和结束时间,找到最早开始的和最晚结束的
思路:结构体遍历找到最大值和最小值,保存下表
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
struct ntime
{
int hh;
int ff;
int ss;
};
struct student
{
char name[1000];
ntime t;
ntime t2;
}s[10000];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
memset(s,'\0',sizeof(s));
scanf("%d",&n);
int i;
for(i = 0; i < n; i++)
{
scanf("%s",s[i].name);
scanf("%d:%d:%d",&s[i].t.hh,&s[i].t.ff,&s[i].t.ss);
scanf("%d:%d:%d",&s[i].t2.hh,&s[i].t2.ff,&s[i].t2.ss);
}
ntime Max,Min;
Max.hh = -1,Max.ff = -1,Max.ss = -1;
Min.hh = 100,Min.ff = 100,Min.ss = 100;
int fMax = 0,fMin = 0;
for(i = 0; i < n; i++)
{
if(Max.hh < s[i].t2.hh)
{
Max.hh = s[i].t2.hh;
Max.ff= s[i].t2.ff;
Max.ss = s[i].t2.ss;fMax = i;
}
else if(Max.hh == s[i].t2.hh)
{
if(Max.ff < s[i].t2.ff)
{
Max.hh = s[i].t2.hh;
Max.ff= s[i].t2.ff;
Max.ss = s[i].t2.ss;fMax = i;
}
else if(Max.ff == s[i].t2.ff)
{
if(Max.ss < s[i].t2.ss)
{
Max.hh = s[i].t2.hh;
Max.ff= s[i].t2.ff;
Max.ss = s[i].t2.ss;fMax = i;
}
}
}
// printf("%d %d %d\n",Min.hh,Min.ff,Min.ss);
if(Min.hh > s[i].t.hh)
{
Min.hh = s[i].t.hh;
Min.ff= s[i].t.ff;
Min.ss = s[i].t.ss;fMin = i;
}
else if(Min.hh == s[i].t.hh)
{
if(Min.ff > s[i].t.ff)
{
Min.hh = s[i].t.hh;
Min.ff= s[i].t.ff;
Min.ss = s[i].t.ss;fMin = i;
}
else if(Min.ff == s[i].t.ff)
{
if(Min.ss > s[i].t.ss)
{
Min.hh = s[i].t.hh;
Min.ff= s[i].t.ff;
Min.ss = s[i].t.ss;fMin = i;
}
}
}
}
printf("%s %s\n",s[fMin].name,s[fMax].name);
}
return 0;
}有一种简便的方法就是用strcmp函数
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
struct student
{
char name[20];
char start[10];
char end[10];
}s[1005];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
// memset(s,'\0',sizeof(s));
scanf("%d",&n);
int i;
for(i = 0; i < n; i++)
{
scanf("%s",s[i].name);
scanf("%s",s[i].start);
scanf("%s",s[i].end);
}
int Max = 0;
int Min = 0;
for(i = 0; i < n; i++)
{
if(strcmp(s[i].start,s[Min].start) < 0)//strcmp(s1,s2) s1 > s2 返回 > 0 s1 < s2 返回 > 0 s1 == s2 返回 0
Min = i;
if(strcmp(s[i].end,s[Max].end) > 0)
Max = i;
}
printf("%s %s\n",s[Min].name,s[Max].name);
}
return 0;
}
本文介绍了一种通过遍历结构体数组来找出最早开始和最晚结束时间的方法,并提供了一个简化版本使用strcmp函数实现相同功能的示例。
370

被折叠的 条评论
为什么被折叠?



