交换序列中的最小值和最大值(C语言)



用户输入一个数字N,其中1<N<100然后输入-1000到1000之间的N个整数。在输出中,必须交换序列中的最大和最小数字:

例如:

Input:
5
1 2 5 4 5
Output:
5 2 1 4 1

这是我的代码:

#include <stdio.h>
int main()
{
int n, numbers,max=-1000, min=1000, i;
scanf("%d", &n);
for (i=0; i<=n-1; ++i) {
scanf("%d", &numbers);
if (numbers>max) max = numbers;
if (numbers<min) min = numbers;
if (numbers==max) numbers=min;
if (numbers==min) numbers=max;
printf("%d ", numbers);
}
return 0;
}

我知道if(numbers==max(的代码是错误的,但我不知道当找到max和min时如何交换数字。当我把max赋给min时,由于下一个if语句,这个数字(现在是min(再次变为max。

这方面的基本算法是:

获取的输入数量

读取输入

查找最大最小

对输入进行迭代,将最大替换为最小,反之亦然。

代码:

#include <stdio.h>
int main()
{
int n, *numbers, max=-1000, min=1000;
// Read number of inputs
scanf("%d", &n);
// Allocate memory
numbers = malloc(n * sizeof(int));
// Read array, and simultaneously find max and min
for (int i=0; i<=n-1; ++i) {
scanf("%d", &numbers[i]);
if(max < numbers[i])
max = numbers[i];
if(min > numbers[i])
min = numbers[i];
}
// Replace max with min and vice versa
for (int i=0; i<=n-1; ++i) {
if(numbers[i] == min)
numbers[i] = max;
else if(numbers[i] == max)
numbers[i] = min;
printf("%d ", numbers[i]);
}
return 0;
}

最新更新