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

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

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

用代码块功能插入代码,请勿粘贴截图
#include 

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

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;
}







#include <stdio.h>
 
int main()
{
    int arr[10];
    int max1, max2, min1, min2, t1, t2;
    for (int i = 0; i < 10; i++)
    {
        scanf("%d", &arr[i]);
    }
    max1 = arr[0];
    max2 = 0;
    min1 = arr[0];
    min2 = 0;
    for (int i = 1; i < 10; i++) 
    {
        if (max1 < arr[i])
        {
            max1 = arr[i];
            max2 = i;
        }
        if (min1 > arr[i])
        {
            min1 = arr[i];
            min2 = i;
        }
    }
//    printf("%d %d",max2, min2);
    for (int i = max2; i > 0; i--)  // 将最大值移到最前面  
    {
        t1 = arr[i];
        arr[i] = arr[i-1];
        arr[i-1] = t1;
    }
     for (int i = 0; i < 10; i++)  // 移动之后,最小值的位置可能改变了 
    {
        if (arr[i] == min1)
            min2 = i;
    }
    for (int i = min2; i < 9; i++)   // 将最小值移到最后面 
    {
        t2 = arr[i];
        arr[i] = arr[i+1];
        arr[i+1] = t2;
    }
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}