题解 | #最小年龄的3个职工#

最小年龄的3个职工

https://www.nowcoder.com/practice/a9fa482eb05149cdbad88689e3cb5f66

#include <stdio.h>
#include <string.h>

typedef struct {
    int empId;
    char name[10];
    int age;
} Employee ;
Employee employeeArray[30];

//j与j+1员工信息互换
void swap(int j) {
    int empId = 0, age = 0;
    char name[10] = {'\0'};
    empId = employeeArray[j + 1].empId;
    age = employeeArray[j + 1].age;
    strcpy(name, employeeArray[j + 1].name);
    employeeArray[j + 1].empId = employeeArray[j].empId;
    employeeArray[j + 1].age = employeeArray[j].age;
    strcpy(employeeArray[j + 1].name, employeeArray[j].name);

    employeeArray[j].empId = empId;
    employeeArray[j].age = age;
    strcpy(employeeArray[j].name, name);
}

int main() {
    int n;
    scanf("%d ", &n);
    char data[n][100];
    int i = 0, j = 0, cnt, idOrAge, nameSize;
    char name[10] = {'\0'};

    while (gets(data[i])) {
        //printf("%s\n", data[i]);
        cnt = 1;
        idOrAge = 0;
        nameSize = 0;
        memset(name, 0, sizeof name);
        for (j = 0; j <= strlen(data[i]); j++) {
            if (data[i][j] == ' ' || j == strlen(data[i])) {
                if (cnt == 1) {
                    employeeArray[i].empId = idOrAge;
                    idOrAge = 0;
                    cnt++;
                    continue;
                }
                if (cnt == 2) {
                    strcpy(employeeArray[i].name, name);
                    cnt++;
                    continue;
                }
                if (cnt == 3) {
                    employeeArray[i].age = idOrAge;
                    break;
                }
            }
            if (cnt == 1 || cnt == 3) {
                idOrAge = idOrAge * 10 + data[i][j] - '0';
            }
            if (cnt == 2) {
                name[nameSize++] = data[i][j];
            }
        }
        i++;
    }

    
    // //输出结构体数组
    // for (i = 0; i < n; i++) {
    //     printf("%d %s %d\n", employeeArray[i].empId, employeeArray[i].name,
    //            employeeArray[i].age);
    // }

    //排序后输出最后三个职工信息
    //先按姓名排序,再按工号,最后按年龄排序
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - 1 - i; j++) {
            if (strcmp(employeeArray[j].name, employeeArray[j + 1].name) > 0) {
                //前者的名字更大,后移
                swap(j);
            }
        }
    }

    //按工号排序
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - 1 - i; j++) {
            if (employeeArray[j].empId > employeeArray[j + 1].empId) {
                //前者的工号更大,后移
                swap(j);
            }
        }
    }

    //按年龄排序
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - 1 - i; j++) {
            if (employeeArray[j].age > employeeArray[j + 1].age) {
                //前者的年龄更大,后移
                swap(j);
            }
        }
    }

    //输出结构体数组
    for (i = 0; i < 3; i++) {
        printf("%d %s %d\n", employeeArray[i].empId, employeeArray[i].name,
               employeeArray[i].age);
    }

    return 0;
}

全部评论

相关推荐

头像
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
牛客618272644号:佬携程工作怎么样,强度大吗
点赞 评论 收藏
分享
服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务