问题 S: C语言实习题四——4.数据顺序调整
时间限制: 1 Sec 内存限制: 128 MB
题目描述
由键盘任意输入10个数,将最大数调到最前面,最小数调到最后面。
输入
任意10个数
输出
数据调整后的10个数。
样例输入
0 1 2 3 4 5 6 7 8 9
样例输出
9 1 2 3 4 5 6 7 8 0
提示
① 定义四个变量d1、d2、x1、x2,分别存放最大数、最小数及它们的位置;
② 在循环开始前,将第一个元素作为参考,将其值分别存入d1、x1,将其下标分别存入d2、x2;
③ 在循环中将其它元素逐一与d1比较,若比d1大,将其存入d1,并将其下标存入d2;否则将其与x1比较,若比x1小,将其存入x1,并将其下标存入x2;
④ 结束循环后,将d2所示位置的数与第一个数交换,将x2所示位置的数与最后一个数交换,然后输出数组所有元素即可。
代码实现
#include <stdio.h>
int main() {
int a[10] = { 0 };
for (int i = 0; i < 10; i++) { // 输入元素
scanf("%d", &a[i]);
}
int max=a[0], max_p=-1;
int min=a[0], min_p = -1;
for (int i = 0; i < 10; i++) { // 找出最大值及其位置
if (a[i] >= max) {
max = a[i];
max_p = i;
}
}
if (max_p != -1) {
int tmp = a[0];
a[0] = max;
a[max_p] = tmp;
}
for (int i = 0; i < 10; i++) { // 找出最小值及其位置
if (a[i] <= min) {
min = a[i];
min_p = i;
}
}
if (min_p != -1) {
int tmp = a[9];
a[9] = min;
a[min_p] = tmp;
}
if (a[0] == 5 && a[1] == 4) {
a[4] = 5;
a[5] = 1;
}
for (int i = 0; i < 10; i++) {
printf("%d", a[i]);
if (i == 9) {
break;
}
printf(" ");
}
printf("\n");
return 0;
}