#include <iostream>
#include <cmath>
using namespace std;
//输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
//写三个函数; ①输入10个数;②进行处理;③输出10个数。
int a[10] = {0}, i, t, pos1, pos2 = 0;
void input()
{
for (i = 0; i < 10; i++)
{
cin >> a[i];
}
}
void dispose()
{
int min = a[0], max = a[0];
for (i = 1; i < 10; i++)
{
if (a[i] < min)
{
min = a[i];
pos1 = i;
}
if (a[i] > max)
{
max = a[i];
pos2 = i;
}
}
if (pos2==0)
{
pos2=pos1;
}
t = a[0];
a[0] = a[pos1];
a[pos1] = t;
t = a[9];
a[9] = a[pos2];
a[pos2] = t;
}
void output()
{
for (i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
}
int main()
{
input();
dispose();
output();
}
这是其中一种方法,把恰好最大数交换到第一位的情况单独考虑,另外一种处理方法如下:
#include <stdio.h>
void deal( int a[] );
int main()
{
int x[10];
for ( int i = 0; i < 10; i++ )
scanf( "%d", &x[i] );
deal( x );
return(0);
}
void deal( int a[] )
{
int max = 0, x, team, l, min = a[0];
for ( int i = 0; i < 10; i++ ) //找最小数,交换
{
if ( a[i] < min )
{
min = a[i]; l = i;
}
}
team = a[0];
a[0] = min;
a[l] = team;
for ( int k = 0; k < 10; k++ ) //找最大数,交换
{
if ( a[k] > max )
{
max = a[k]; x = k;
}
}
team = a[9];
a[9] = max;
a[x] = team;
for ( int j = 0; j < 10; j++ ) //输出
printf( "%d ", a[j] );
}
直接最大和最小分开,重新考虑这件事情,就不存在混乱,但是效率稍低。