总时间限制: 1000ms
内存限制: 65536kB
描述
输入10
个整数,彼此以空格分隔
重新排序以后输出(也按空格分隔),要求:
1.先输出其中的奇数,并按从大到小排列;
2.然后输出其中的偶数,并按从小到大排列。
输入
任意排序的10
个整数(0~100)
,彼此以空格分隔
输出
按照要求排序后输出,由空格分隔
样例输入
4 7 3 13 11 12 0 47 34 98
样例输出
47 13 11 7 3 0 4 12 34 98
提示
- 测试数据可能有很多组,请使用
while(cin>>a[0]>>a[1]>>...>>a[9])
类似的做法来实现;
- 输入数据随机,有可能相等。
思路
与[链接登录后可见]相类似
答案
#include <stdio.h>
typedef struct {
int arr[10];
int count;
} array;
int main() {
int main[10];
array j, o;
while(scanf("%d %d %d %d %d %d %d %d %d %d", &main[0], &main[1], &main[2], &main[3], &main[4], &main[5], &main[6], &main[7], &main[8], &main[9]) != EOF) {
j.count = 0;
o.count = 0;
for(int i = 0; i < 10; i++) {
if(main[i] % 2 == 0) {
j.arr[j.count++] = main[i];
} else {
o.arr[o.count++] = main[i];
}
}
int t;
for(int i = 0; i < j.count-1; i++) {
for(int k = i; k < j.count; k++) {
if(j.arr[i] > j.arr[k]) {
t = j.arr[i];
j.arr[i] = j.arr[k];
j.arr[k] = t;
}
}
}
for(int i = 0; i < o.count-1; i++) {
for(int k = i; k < o.count; k++) {
if(o.arr[i] < o.arr[k]) {
t = o.arr[i];
o.arr[i] = o.arr[k];
o.arr[k] = t;
}
}
}
for(int i = 0; i < o.count; i++) {
main[i] = o.arr[i];
}
int k = 0;
for(int i = o.count; i < j.count+o.count; i++) {
main[i] = j.arr[k++];
}
for(int i = 0; i < 10; i++) {
if(i == 0) {
printf("%d ", main[i]);
} else if(i == 9) {
printf("%d\n", main[i]);
} else {
printf("%d ", main[i]);
}
}
}
}
注意
- 以下代码可解决连续输入的问题
while(scanf("%d %d %d %d %d %d %d %d %d %d", &main[0], &main[1], &main[2], &main[3], &main[4], &main[5], &main[6], &main[7], &main[8], &main[9]) != EOF)
- 第10项一定要换行