鱼C论坛

 找回密码
 立即注册
查看: 1722|回复: 12

[已解决]交换最小值和最大值

[复制链接]
发表于 2020-1-9 21:33:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。

注意:题目保证最大和最小值都是唯一的。
输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。

输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。

输入样例:
5
8 2 5 1 4


输出样例:
1 2 5 4 8
麻烦各位大佬,看看我的出错在哪了
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
    int len,i;
    int num[1024];
    int min,max,min_index,max_index;

    scanf("%d",&len);

    for(i=0;i<len;i++)
    {
        scanf("%d",&num[i]);
    }

    min = num[0];
    max = num[0];
    min_index = 0;
    max_index = 0;

    for(i=0;i<len;i++)
    {
        
        if(min>num[i])
        {
            min = num[i];
            min_index = i;
        }

        if(max<num[i])
        {
            max = num[i];
            max_index = i;
        }

    }
    //最小值和第一个值互换
    int t;
    t = num[min_index];
    num[min_index] = num[0];
    num[0] = t;

    //最大值和最后一个互换
    int k;
    k = num[max_index];
    num[max_index] = num[len-1];
    num[len-1] = k;

    for(i=0;i<len;i++)
    {
        printf("%d  ",num[i]);
    }
   

    printf("\n");

    printf("%d %d\n",min_index,max_index);
    printf("%d %d\n",num[min_index],num[max_index]);

    system("pause");

    return 0;


}
最佳答案
2020-1-9 22:30:18
最后的魁拔 发表于 2020-1-9 22:14
6     输入
123 232 345 567 111 666 输入

输入
6
123 232 345 567 111 666

输出
111  232  345  567  666  123

对,输出的确是错的,那么正确的输出是什么样的呢?学会提问题
对,我再从上面走一次就可以走出正确结果
上面的过程比较短,我还愿意走一遍,如果过程很长呢?
你都走过一次了,把正确的结果也贴上来不好吗?
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
        int len, i;
        int num[1024];
        int min, max, min_index, max_index;

        scanf("%d", &len);

        for(i = 0; i < len; i++)
        {
                scanf("%d", &num[i]);
        }

        min = num[0];
        max = num[0];
        min_index = 0;
        max_index = 0;

        for(i = 0; i < len; i++)
        {

                if(min > num[i])
                {
                        min = num[i];
                        min_index = i;
                }

                if(max < num[i])
                {
                        max = num[i];
                        max_index = i;
                }

        }
        //最小值和第一个值互换
        int t;
        t = num[min_index];
        num[min_index] = num[0];
        num[0] = t;



        if(num[0] == num[max_index])
                max_index = min_index;


        //最大值和最后一个互换
        int k;
        k = num[max_index];
        num[max_index] = num[len - 1];
        num[len - 1] = k;

        for(i = 0; i < len; i++)
        {
                printf("%d  ", num[i]);
        }


        printf("\n");

        printf("%d %d\n", min_index, max_index);
        printf("%d %d\n", num[min_index], num[max_index]);

        system("pause");

        return 0;


}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-9 22:02:57 | 显示全部楼层
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
        int len, i;
        int num[1024];
        int min, max, min_index, max_index;

        scanf("%d", &len);

        for(i = 0; i < len; i++)
        {
                scanf("%d", &num[i]);
        }

        min = num[0];
        max = num[0];
        min_index = 0;
        max_index = 0;

        for(i = 0; i < len; i++)
        {

                if(min > num[i])
                {
                        min = num[i];
                        min_index = i;
                }

                if(max < num[i])
                {
                        max = num[i];
                        max_index = i;
                }

        }
        //最小值和第一个值互换
        int t;
        t = num[min_index];
        num[min_index] = num[0];
        num[0] = t;






        max_index = min_index;







        //最大值和最后一个互换
        int k;
        k = num[max_index];
        num[max_index] = num[len - 1];
        num[len - 1] = k;

        for(i = 0; i < len; i++)
        {
                printf("%d  ", num[i]);
        }


        printf("\n");

        printf("%d %d\n", min_index, max_index);
        printf("%d %d\n", num[min_index], num[max_index]);

        system("pause");

        return 0;


}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-9 22:08:15 | 显示全部楼层

不行呀,还是有错>--<
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 22:10:43 | 显示全部楼层
最后的魁拔 发表于 2020-1-9 22:08
不行呀,还是有错>--

在说错之前,请先说明你期望的结果以及现在的结果
我不是你,我不知道你在想什么,所以需要你说出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-9 22:14:47 | 显示全部楼层
人造人 发表于 2020-1-9 22:10
在说错之前,请先说明你期望的结果以及现在的结果
我不是你,我不知道你在想什么,所以需要你说出来

6     输入
123 232 345 567 111 666 输入


输出    111  232  345  567  666  123   。。。错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 22:30:18 | 显示全部楼层    本楼为最佳答案   
最后的魁拔 发表于 2020-1-9 22:14
6     输入
123 232 345 567 111 666 输入

输入
6
123 232 345 567 111 666

输出
111  232  345  567  666  123

对,输出的确是错的,那么正确的输出是什么样的呢?学会提问题
对,我再从上面走一次就可以走出正确结果
上面的过程比较短,我还愿意走一遍,如果过程很长呢?
你都走过一次了,把正确的结果也贴上来不好吗?
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
        int len, i;
        int num[1024];
        int min, max, min_index, max_index;

        scanf("%d", &len);

        for(i = 0; i < len; i++)
        {
                scanf("%d", &num[i]);
        }

        min = num[0];
        max = num[0];
        min_index = 0;
        max_index = 0;

        for(i = 0; i < len; i++)
        {

                if(min > num[i])
                {
                        min = num[i];
                        min_index = i;
                }

                if(max < num[i])
                {
                        max = num[i];
                        max_index = i;
                }

        }
        //最小值和第一个值互换
        int t;
        t = num[min_index];
        num[min_index] = num[0];
        num[0] = t;



        if(num[0] == num[max_index])
                max_index = min_index;


        //最大值和最后一个互换
        int k;
        k = num[max_index];
        num[max_index] = num[len - 1];
        num[len - 1] = k;

        for(i = 0; i < len; i++)
        {
                printf("%d  ", num[i]);
        }


        printf("\n");

        printf("%d %d\n", min_index, max_index);
        printf("%d %d\n", num[min_index], num[max_index]);

        system("pause");

        return 0;


}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 22:31:22 | 显示全部楼层
另外,学会调试程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 22:41:08 | 显示全部楼层
本帖最后由 jackz007 于 2020-1-9 22:42 编辑

        楼主试试这个代码呢?
#include <stdio.h>

void swap(int & a , int & b)
{
        int e                                                   ;
        e = a                                                   ;
        a = b                                                   ;
        b = e                                                   ;
}

main(void)
{
        int k , n                                               ;
        scanf("%d" , & n)                                       ;
        int d[n]                                                ;
        for(k = 0 ; k < n ; k ++) scanf("%d" , & d[k])          ;
        if(d[0] > d[n - 1]) swap(d[0] , d[n - 1])               ;
        for(k = 1 ; k < n - 1 ; k ++) {
                if(d[k] < d[0]) swap(d[k] , d[0])               ;
                else if(d[k] > d[n - 1]) swap(d[k] , d[n - 1])  ;
        }
        printf("%d" , d[0])                                     ;
        for(k = 1 ; k < n ; k ++) printf(" %d" , d[k])          ;
}
        编译、运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
5
8 2 5 1 4
1 4 5 2 8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-9 22:42:01 | 显示全部楼层
人造人 发表于 2020-1-9 22:31
另外,学会调试程序

好的谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 22:48:37 | 显示全部楼层
jackz007 发表于 2020-1-9 22:41
楼主试试这个代码呢?

        编译、运行实况:

他这个应该是C语言
C语言用gcc编译,后缀为 .c
g++编译C++代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 22:53:38 | 显示全部楼层
本帖最后由 jackz007 于 2020-1-9 22:56 编辑
人造人 发表于 2020-1-9 22:48
他这个应该是C语言
C语言用gcc编译,后缀为 .c
g++编译C++代码


       是的,我总是用 g++ 编译 C 代码,请问,这样做有什么问题和不妥吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 22:59:38 | 显示全部楼层
jackz007 发表于 2020-1-9 22:53
是的,我总是用 g++ 编译 C 代码,请问,这样做有什么问题和不妥吗?

C++不是100%兼容C,有可能出问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 23:17:35 | 显示全部楼层
人造人 发表于 2020-1-9 22:59
C++不是100%兼容C,有可能出问题

        谢谢提醒,迄今为止,我还没有遇到过任何的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 07:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表