题目输入输出如下:
我的代码如下(AC):
#include<stdio.h>
#include<string.h>
typedef struct student{
int id;
char name[10];
int age;
}stu;
void findmin(stu s[], int l, int r){
int min = s[l].age;
int mini = l;
for(int i = l; i < r; i++){
if(min > s[i].age){
min = s[i].age;
mini = i;
}else if(min == s[i].age){
if(s[mini].id > s[i].id){
min = s[i].age;
mini = i;
}else if(s[mini].id == s[i].id){
if(strcmp(s[mini].name,s[i].name) > 0){//return 1 means that the latter is smaller.
min = s[i].age;
mini = i;
}
}
}
}
printf("%d %s %d\n", s[mini].id, s[mini].name, s[mini].age);
s[mini].age = 200;
}
int main(){
int n;
scanf("%d", &n);
stu s[n];
for(int i = 0; i < n; i++){
scanf("%d", &s[i].id);
scanf("%s", s[i].name);
scanf("%d", &s[i].age);
}
// printf("------------\n");
// for(int i = 0; i < n; i++){
// printf("%d %s %d\n", s[i].id, s[i].name, s[i].age);
// }
// printf("------------\n");
findmin(s, 0, n);
findmin(s, 0, n);
findmin(s, 0, n);
return 0;
}
题目不难,重点是记录一下结构体的使用。但我耍赖了,题目要求输出3个比较条件下最小的3组,当找出最小的一组后,由于不方便删除,我就将该组的年龄改为了200,这样在接下来的比较中就不会影响结果。
定义结构体(stu相当于student的别名):
typedef struct student{
int i;
char c;
char s[10];
…
}stu
声明变量:
stu s[100];