题目
答案
#include<stdio.h>
int main()
{
int i,j;
int n,t;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int min=a[0],flag1=0;
for(i=0;i<n;i++)
{
if(a[i]<min)
{
min=a[i];
flag1=i;
}
}
t=a[0];
a[0]=a[flag1];
a[flag1]=t;
int max=a[0],flag2=0;
for(i=0;i<n;i++)
{
if(a[i]>max)
{
max=a[i];
flag2=i;
}
}
t=a[n-1];
a[n-1]=a[flag2];
a[flag2]=t;
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
测试点
总结
我在做这道题有点想当然了,一开始就直接找这个数组里最大值最小值的下标然后连续交换两次,结果当然就错了
这道题应该是有两种解法,要么先遍历一遍找最小值,交换,再遍历一遍找最大值交换;要么直接找到最小值最大值的位置,然后在交换时进行判断
我选择的是第一种,当然一部分原因是第二种方法需要动脑想想,自己想偷懒就没有尝试
注意:int max=a[0],flag2=0;
这行代码要出现在第一次交换之后,否则会出错