加载中...

浙江理工大学入队200题——19L

问题 L: 习题8-3 数据交换

题目描述

输入10个整数,将其中最小的数与第一个数交换,把其中最大的数与最后一个数交换。

把交换后的数分行输出,每个数占一行。

用函数和指针实现。

输入

以空格分隔的10个整数。

输出

分行输出10个整数,每个数占一行。

样例输入 Copy

1 2 9 4 5 6 7 8 0 3

样例输出 Copy

0
2
3
4
5
6
7
8
1
9

题解 指针版

最小与第一个,最大与最后一个交换是有一个小坑的(这里先交换最大值)
例如6 5 1 4 这几个数,如果按人脑就变成1 5 4 6这是对的
但是你可能会出现这种情况 4 5 6 1这是为什么呢?
如上述情况,按最小放第一位变成 1 5 6 4,此时你的最大值的下标显然没有改变还是1,直接移位会造成最大值的丢失。这是因为你最大值在第一位或者是你最小值在最后一位,并且你没有判断。
所以当我们交换最大值最小值时需要判断两个最大值是否在边界的情况。
代码(AC)

点击查看代码
#include<stdio.h>
void JH(int *m);//JIAO HUAN
int main(void)
{   
    int i,a[10];
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);
    JH(a);
    for(i=0;i<10;i++)
    printf("%d\n",a[i]);
    return 0;
}
void JH(int *m)
{
    int *max,*min,*p,temp;
    max=min=m;
    for(p=m+1;p<m+10;p++)
    {
        if(*p>*max) max=p;
        else if(*p<*min) min=p;
    }
    temp=m[0];
    m[0]=*min;
    *min=temp;
    if(max==m)  max=min;
    temp=m[9];
    m[9]=*max;
    *max=temp;
}
posted @ 2022-10-30 15:22  shany212  阅读(65)  评论(0编辑  收藏  举报