哪位大佬帮我看一下这个程序,为什么先让最大值与最后一个数交换就可以实现这个程序目的,而先交换最小值却不可以
1条回答 默认 最新
- 技术专家团-小桥流水 2022-01-06 11:17关注
当最小值在最后一个位置、最大值在第一个位置的时候,先交换最小值在交换最大值等于没有交换。
在for循环之前,p和k需要重置为0
代码修改如下:#include <stdio.h> int main() { int a[10]; int n,i,max,min,t,p,k,u; scanf("%d",&n); scanf("%d",&a[0]); max=a[0]; min=a[0]; p = 0; k = 0; for (i=1;i<n;i++) { scanf("%d",&a[i]); if(max<a[i]) { max=a[i]; p=i; } if(min >a[i]) { min=a[i]; k=i; } } if(p==0 && k==n-1) //最大值在第一个位置,最小值在最后一个位置 { //交换一次即可 t = a[p]; a[p]=a[k]; a[k]=t; }else if(p==0) //最大值在第一个位置 { //先把最大值放在最后 u=a[p]; a[p]=a[n-1]; a[n-1]=u; //然后在把最小值放在最开始 t=a[k]; a[k]=a[0]; a[0]=t; }else if(k == n-1) //最小值在最后一个位置(这个跟最后的else合并也可以) { //先把最小值放在开头 t=a[k]; a[k]=a[0]; a[0]=t; //然后在把最大值放在末尾 u=a[p]; a[p]=a[n-1]; a[n-1]=u; }else { t=a[k]; a[k]=a[0]; a[0]=t; u=a[p]; a[p]=a[n-1]; a[n-1]=u; } for(i=0;i<n;i++) printf("%d ",a[i]); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录