Summer_chord 2022-09-15 16:08 采纳率: 100%
浏览 143
已结题

由键盘任意输入10个数,将最大数调到最前面,最小数调到最后面。

问题遇到的现象和发生背景

由键盘任意输入10个数,将最大数调到最前面,最小数调到最后面。

用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>

int main()
{
    int arr[10] = { 0 };
    int max1, max2, min1, min2;
    for (int i = 0; i < 10; i++)
    {
        scanf_s("%d", &arr[i]);
    }
    max1 = arr[0];
    max2 = 0;
    min1 = arr[0];
    min2 = 0;
    for (int i = 0; i < 10; i++)
    {
        if (max1 < arr[i])
        {
            max1 = arr[i];
            max2 = i;
        }
        if (min1 > arr[i])
        {
            min1 = arr[i];
            min2 = i;
        }
    }
    //printf("%d %d %d %d", max1, max2, min1, min2);
    int arr2[10] = { 0 };
    for (int i = 0; i < 10; i++)
    {
        arr2[i] = arr[i];
    }
    for (int i = 0; i < max2; i++)//将最大数之前部分向后平移
    {
        arr[i + 1] = arr2[i];
    }

    for (int i = 10; i > min2; i--)//将最小数之后部分向前平移
    {
        arr[i - 1] = arr2[i];
    }

    arr[0] = max1;
    arr[9] = min1;
    for (int i = 0; i < 10; i++)
    {
        printf("%d", arr[i]);
    }
    return 0;
}


运行结果及报错内容

输入0 1 2 3 4 5 6 7 8 9,输出9 2 3 4 5 6 7 8 9 0

我的解答思路和尝试过的方法

增减平移部分i值,发现对输出部分没有影响

我想要达到的结果

输入0 1 2 3 4 5 6 7 8 9 输出9 1 2 3 4 5 6 7 8 0
或输入1 1 0 2 3 5 9 2 6 4 输出9 1 1 2 3 5 2 6 4 0

  • 写回答

2条回答 默认 最新

  • 日向晚,声声慢 2022-09-15 17:05
    关注

    img

    
    
    ```c
    
    #include<stdio.h>
    int main()
    {
        int arr[10] = { 0 };
        int i = 0;
        for (; i < 10; i++)
        {
            scanf("%d", &arr[i]);
        }
        int max = arr[0];
        int min = arr[0];
        int x = 0;//标记最大值的下标
        int y = 0;//标记最小值的下标
        for (i = 0; i < 10; i++)
        {
            if (max < arr[i])
            {
                max = arr[i];
                x = i;
            }
        }
        //将最大值处覆盖
        //4 5 2 3 1 9 6 7 10 8
        //
        for (i = x ; i >= 0 ; i--)
        {
            arr[i] = arr[i-1];
        }
        arr[0] = max;
        for (i = 0; i < 10; i++)
        {
            if (min > arr[i])
            {
                min = arr[i];
                y = i;
            }
        }
        //将最小值覆盖
        for (i = y; i < 10-1; i++)//-1防止越界
        {
            arr[i] = arr[i + 1];
        }
        arr[9] = min;
        for (i = 0; i < 10; i++)
        {
            printf("%d ", arr[i]);
        }
        return 0;
    }
    
    
    
    
    
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月23日
  • 已采纳回答 9月15日
  • 创建了问题 9月15日

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line