鱼C论坛

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

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

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

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

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

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

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

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

输入样例:
5
8 2 5 1 4


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


  3. int main(void)
  4. {
  5.     int len,i;
  6.     int num[1024];
  7.     int min,max,min_index,max_index;

  8.     scanf("%d",&len);

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

  13.     min = num[0];
  14.     max = num[0];
  15.     min_index = 0;
  16.     max_index = 0;

  17.     for(i=0;i<len;i++)
  18.     {
  19.         
  20.         if(min>num[i])
  21.         {
  22.             min = num[i];
  23.             min_index = i;
  24.         }

  25.         if(max<num[i])
  26.         {
  27.             max = num[i];
  28.             max_index = i;
  29.         }

  30.     }
  31.     //最小值和第一个值互换
  32.     int t;
  33.     t = num[min_index];
  34.     num[min_index] = num[0];
  35.     num[0] = t;

  36.     //最大值和最后一个互换
  37.     int k;
  38.     k = num[max_index];
  39.     num[max_index] = num[len-1];
  40.     num[len-1] = k;

  41.     for(i=0;i<len;i++)
  42.     {
  43.         printf("%d  ",num[i]);
  44.     }
  45.    

  46.     printf("\n");

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

  49.     system("pause");

  50.     return 0;


  51. }
复制代码
最佳答案
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

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

  1. #include <stdio.h>
  2. #include <stdlib.h>


  3. int main(void)
  4. {
  5.         int len, i;
  6.         int num[1024];
  7.         int min, max, min_index, max_index;

  8.         scanf("%d", &len);

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

  13.         min = num[0];
  14.         max = num[0];
  15.         min_index = 0;
  16.         max_index = 0;

  17.         for(i = 0; i < len; i++)
  18.         {

  19.                 if(min > num[i])
  20.                 {
  21.                         min = num[i];
  22.                         min_index = i;
  23.                 }

  24.                 if(max < num[i])
  25.                 {
  26.                         max = num[i];
  27.                         max_index = i;
  28.                 }

  29.         }
  30.         //最小值和第一个值互换
  31.         int t;
  32.         t = num[min_index];
  33.         num[min_index] = num[0];
  34.         num[0] = t;



  35.         if(num[0] == num[max_index])
  36.                 max_index = min_index;


  37.         //最大值和最后一个互换
  38.         int k;
  39.         k = num[max_index];
  40.         num[max_index] = num[len - 1];
  41.         num[len - 1] = k;

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


  46.         printf("\n");

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

  49.         system("pause");

  50.         return 0;


  51. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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


  3. int main(void)
  4. {
  5.         int len, i;
  6.         int num[1024];
  7.         int min, max, min_index, max_index;

  8.         scanf("%d", &len);

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

  13.         min = num[0];
  14.         max = num[0];
  15.         min_index = 0;
  16.         max_index = 0;

  17.         for(i = 0; i < len; i++)
  18.         {

  19.                 if(min > num[i])
  20.                 {
  21.                         min = num[i];
  22.                         min_index = i;
  23.                 }

  24.                 if(max < num[i])
  25.                 {
  26.                         max = num[i];
  27.                         max_index = i;
  28.                 }

  29.         }
  30.         //最小值和第一个值互换
  31.         int t;
  32.         t = num[min_index];
  33.         num[min_index] = num[0];
  34.         num[0] = t;






  35.         max_index = min_index;







  36.         //最大值和最后一个互换
  37.         int k;
  38.         k = num[max_index];
  39.         num[max_index] = num[len - 1];
  40.         num[len - 1] = k;

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


  45.         printf("\n");

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

  48.         system("pause");

  49.         return 0;


  50. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不行呀,还是有错>--<
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

在说错之前,请先说明你期望的结果以及现在的结果
我不是你,我不知道你在想什么,所以需要你说出来
小甲鱼最新课程 -> https://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   。。。错的
小甲鱼最新课程 -> https://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

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

  1. #include <stdio.h>
  2. #include <stdlib.h>


  3. int main(void)
  4. {
  5.         int len, i;
  6.         int num[1024];
  7.         int min, max, min_index, max_index;

  8.         scanf("%d", &len);

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

  13.         min = num[0];
  14.         max = num[0];
  15.         min_index = 0;
  16.         max_index = 0;

  17.         for(i = 0; i < len; i++)
  18.         {

  19.                 if(min > num[i])
  20.                 {
  21.                         min = num[i];
  22.                         min_index = i;
  23.                 }

  24.                 if(max < num[i])
  25.                 {
  26.                         max = num[i];
  27.                         max_index = i;
  28.                 }

  29.         }
  30.         //最小值和第一个值互换
  31.         int t;
  32.         t = num[min_index];
  33.         num[min_index] = num[0];
  34.         num[0] = t;



  35.         if(num[0] == num[max_index])
  36.                 max_index = min_index;


  37.         //最大值和最后一个互换
  38.         int k;
  39.         k = num[max_index];
  40.         num[max_index] = num[len - 1];
  41.         num[len - 1] = k;

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


  46.         printf("\n");

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

  49.         system("pause");

  50.         return 0;


  51. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 22:31:22 | 显示全部楼层
另外,学会调试程序
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  2. void swap(int & a , int & b)
  3. {
  4.         int e                                                   ;
  5.         e = a                                                   ;
  6.         a = b                                                   ;
  7.         b = e                                                   ;
  8. }

  9. main(void)
  10. {
  11.         int k , n                                               ;
  12.         scanf("%d" , & n)                                       ;
  13.         int d[n]                                                ;
  14.         for(k = 0 ; k < n ; k ++) scanf("%d" , & d[k])          ;
  15.         if(d[0] > d[n - 1]) swap(d[0] , d[n - 1])               ;
  16.         for(k = 1 ; k < n - 1 ; k ++) {
  17.                 if(d[k] < d[0]) swap(d[k] , d[0])               ;
  18.                 else if(d[k] > d[n - 1]) swap(d[k] , d[n - 1])  ;
  19.         }
  20.         printf("%d" , d[0])                                     ;
  21.         for(k = 1 ; k < n ; k ++) printf(" %d" , d[k])          ;
  22. }
复制代码

        编译、运行实况:
  1. C:\Bin>g++ -o x x.c

  2. C:\Bin>x
  3. 5
  4. 8 2 5 1 4
  5. 1 4 5 2 8
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

        编译、运行实况:

他这个应该是C语言
C语言用gcc编译,后缀为 .c
g++编译C++代码
小甲鱼最新课程 -> https://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 代码,请问,这样做有什么问题和不妥吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

C++不是100%兼容C,有可能出问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

        谢谢提醒,迄今为止,我还没有遇到过任何的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 02:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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