样例中的arr[0]交换后,再在后面交换一次后,就不见了,而最小值却储存了两个。
分别记录最大值及其下标、最小值及其下标,然后交换:
#include <stdio.h>
int main()
{
int n;
int num[10];
int i = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &num[i]);
}
int tmp;
int imax = num[0];
int imin = num[0];
int idx_max = 0;
int idx_min = 0;
for (i = 1; i < n; i++)
{
if (num[i] > imax)
{
imax = num[i];
idx_max = i;
}
else if (num[i] < imin)
{
imin = num[i];
idx_min = i;
}
}
tmp = num[n - 1];
num[n - 1] = imax;
num[idx_max] = tmp;
tmp = num[0];
num[0] = imin;
num[idx_min] = tmp;
for (i = 0; i < n; i++)
printf("%d ", num[i]);
return 0;
}