题目:
样例:
代码部分:
include<stdio.h>
int main() {
int n; //人数
scanf_s("%d", &n);
//结构体信息采集
struct patient {
long id;
int age;
};
struct patient s1[10];
for (int i = 0; i < n; i++) {
scanf_s("%ld %d", &s1[i].id, &s1[i].age);
}
//判断
//先后判断
//年龄判断/排序
int arr1[10] = { 0 }; //年龄数组初始情况
int arr2[10]; //年龄数组排序情况
int temp = 0; //存储中间值
//大于等于60岁情况
for (int j = 0; j < n; j++) {
if (s1[j].age >= 60) {
arr1[j] = j; //存储顺序下标
}
else {
arr1[j] = -1; //age未达到60的情况,输出时跳过该i值
}
}
//比大小部分
int mid[10];
for (int i = 0; i < n; i++) {
mid[i] = -1; //初始化
}
int w = 0;
for (int i = 0; i < n; i++) {
for (int j = w; j < n; j++) {
if (arr1[j] != -1) {
mid[i] = j;
w = ++j;
break;
}
}
}
//调换顺序
for (int i = 0; i < n - 1; i++) {if (s1[mid[i + 1]].age > s1[mid[i]].age) {int t = mid[i];mid[i] = mid[i + 1];mid[i + 1] = t;i = -1; //重置i值,重新开始排序 //这个可以代替嵌套循环排序}
}//大于等于60岁排序
for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (mid[j] != -1) {arr2[i] = mid[j]; //存储顺序下标mid[j] = -1; //age已存储,置-1防止重复存储temp = i;break;}}
}
//非大于等于60岁情况的排序
int k = 0; //记录非大于等于60岁情况的起始下标
for (int i = temp + 1; i < n; i++) {for (int j = k; j < n; j++) {if (s1[j].age < 60) {arr2[i] = j; //存储顺序下标k = ++j; //更新k值,防止重复存储break;}}
}
//输出结果
putchar('\n');
for (int i = 0; i < n; i++) {printf("%06ld\n", s1[arr2[i]].id);
}
return 0;
}
输出:
个人感受:
这次敲代码让我意识到了一个问题:我需要格式化设置变量、位置关系,因为我经常想到什么写什么,堆砌了一堆垃圾变量,在整合代码的时候浪费了不少时间