年龄排序

题目:
image
样例:
image
代码部分:

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;

}
输出:
c7826e1a7464a97fc0c56859bb6b9ae7
个人感受:
这次敲代码让我意识到了一个问题:我需要格式化设置变量、位置关系,因为我经常想到什么写什么,堆砌了一堆垃圾变量,在整合代码的时候浪费了不少时间

posted @ 2025-10-07 15:44  卷柏酥肉酱  阅读(19)  评论(0)    收藏  举报