04-引用和结构体-
题目描述
定义一个结构体,包含年月日,表示一个学生的出生日期。然后在一群学生的出生日期中找出谁的出生日期排行第二
要求:出生日期的存储必须使用结构体,不能使用其他类型的数据结构。
要求程序全过程对出生日期的输入、访问、输出都必须使用结构。
输入
第一行输入t表示有t个出生日期
每行输入三个整数,分别表示年、月、日
依次输入t个实例
输出
输出排行第二老的出生日期,按照年-月-日的格式输出
输入样例
6
1980 5 6
1981 8 3
1980 3 19
1980 5 3
1983 9 12
1981 11 23
1980-5-3
#include<iostream>
using namespace std;
struct stu
{
int year;
int month;
int date;
};
int main()
{
int t,i;
cin>>t;
struct stu s[100];
for(i=0;i<t;i++)
{
cin>>s[i].year;
cin>>s[i].month;
cin>>s[i].date;
}
int time=2;//循环两次,第一次找到minstu然后弹出
struct stu a[100],b[100],c;
while(time--)
{
int min=2021,s1=0,s2=0;
for(i=0;i<t;i++)
if(s[i].year<min)
min=s[i].year;
for(i=0;i<t;i++)
if(s[i].year==min)
{
a[s1]=s[i];//用新数组来储存
s1++;
}
min=12;
for(i=0;i<s1;i++)
if(a[i].month<min)
min=s[i].month;
for(i=0;i<s1;i++)
if(a[i].month==min)
{
b[s2]=a[i];
s2++;
}
min=31;
for(i=0;i<s2;i++)
if(b[i].date<min)
{
min=b[i].date;
c=b[i];
}
int p=0;
if(t!=0)//第一次循环弹出
{
for(i=0;i<t;i++)
if(s[i].date==c.date&&s[i].month==c.month&&s[i].year==c.year)
p=i;
for(i=p;i<t;i++)
s[p]=s[p+1];
}
}
cout<<c.year<<"-"<<c.month<<"-"<<c.date<<endl;
return 0;
}
一边过了就没想找其他方法,可能不用新数组储存数据也可以……?