【202002】牛客网“最小年龄的3个职工”

题目输入输出如下:
在这里插入图片描述
我的代码如下(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];

发布了6 篇原创文章 · 获赞 0 · 访问量 77

猜你喜欢

转载自blog.csdn.net/weixin_40246778/article/details/104311354