Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
有一个长度为n的整数序列,其中最大值和最小值不会出现在序列的第一和最后一个位置。
请写一个程序,把序列中的最小值与第一个数交换,最大值与最后一个数交换。输出转换好的序列。
Input
输入包括两行。
第一行为正整数n(1≤n≤10)。
第二行为n个正整数组成的序列。
Output
输出转换好的序列。数据之间用空格隔开。
Sample Input
6
2 3 8 1 4 5
Sample Output
1 3 5 2 4 8
Hint
Source
本题只需找出最大值和最小值,并与第一个或最后一个交换,但注意只找到最大值和最小值所在的位置,交换两位置的数值,所以找到最值后要标记出来
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n;
int a[11];
int max=0,min; //将最大值初始化为0,因为数列为正整数,所以一定大于等于零;
int i,k,l;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]>max) //寻找最大值,并标记出来;
{
max=a[i];
k=i;
}
if(i==0)
min=a[i]; //先假定第一个为最小值,如果有更小的便交换;
if(a[i]<min)
{
min = a[i];
l=i;
}
}
int t = a[0];
a[0] = a[l];
a[l] = t;
t = a[n-1];
a[n-1] = a[k];
a[k] = t; //交换;
for(i=0;i<n;i++)
{
if(i==n-1)
printf("%d\n",a[i]);
else printf("%d ",a[i]);
}
return 0;
}
6
2 3 8 1 4 5
1 3 5 2 4 8
Process returned 0 (0x0) execution time : 8.674 s
Press any key to continue.