基础c-结构体-2
一、概要描述
1、背景
N个正整数均小于10000,现在将这些数按照除以3的余数从小到大排序,若余数相等,则按照正整数值从小到大排序。
2、实现
用scanf来进行输入,并且用结构体来进行接收,在排序时用qsort函数
二、困难
如何用结构体来集体先输入数据,再接收完数据后进行处理;
#include<stdio.h>
#include<stdlib.h>
typedef struct Stu {
int num;
int yu;
}stu;
int cmp(const void* a, const void* b) {
stu c = *(stu*)a;
stu d = *(stu*)b;
if (c.yu == d.yu)
{
return c.num > d.num ? c.num : d.num;
}
else return c.yu - d.yu;
}
int main() {
int n;
stu sz[100];
while (scanf_s("%d", &n) != EOF)
{
for (int i = 0; i < n; i++)
{
scanf_s("%d", &sz[i].num);
sz[i].yu = sz[i].num % 3;
}
qsort(sz, n, sizeof(sz[0]), cmp);
for (int i = 0; i < n; i++)
{
printf("%d", sz[i].num);
printf(" ");
}
printf("\b");
printf("\n");
}
return 0;
}
以下为执行结果:
有没有大佬会解决这个问题的?