在底特律吃饼干的设计师 2022-01-06 11:12 采纳率: 100%
浏览 254
已结题

将数组中最大值与最后一个值交换,最小值与第一个数交换

哪位大佬帮我看一下这个程序,为什么先让最大值与最后一个数交换就可以实现这个程序目的,而先交换最小值却不可以

img

img

  • 写回答

1条回答 默认 最新

  • 关注

    当最小值在最后一个位置、最大值在第一个位置的时候,先交换最小值在交换最大值等于没有交换。
    在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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月14日
  • 已采纳回答 1月6日
  • 创建了问题 1月6日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分