【问题标题】:sorting three number in a specific order按特定顺序对三个数字进行排序
【发布时间】:2018-04-11 03:13:09
【问题描述】:

所以,我只是想按照用户指定的特定顺序对三个数字进行排序。

因此,在此示例中,用户输入了三个数字:1 5 3,并希望按 ABC 顺序对它们进行排序,即从最小到中到最大。因此,它输出 1 3 5。 第二个例子是按 CAB 顺序排序,这意味着从最大到最小到中间。

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

int main()
{
   int i,array[3];
   for(i = 0; i < 3; i++)
    scanf("%d",&array[i]);
   int max,mid,min;
   max = array[0];
   mid = array[0];
   min = array[0];
   for(i = 0; i < 3; i++){
       if(max < array[i])
       max= array[i];
       if(min > array[i])
            min = array[i];
   }
   for(i = 0; i < 3; i++){
       if(array[i] != max || array[i]!= min)
         mid = array[i];
  }
   char A,B,C;
   scanf("%c%c%c",&A,&B,&C);

   if(A == 'A')
    printf("%d ",min);

   if(B == 'A')
     printf("%d ",min);
    if(C == 'A')
        printf("%d ",min);
    if(A =='B')
        printf("%d ",mid);
    if(B == 'B')
        printf("%d ",mid);
    if(C =='B')
        printf("%d ",mid);
    if(A == 'C')
        printf("%d ",max);
    if(B == 'C')
        printf("%d ",max);
    if(C == 'C')
        printf("%d ",max);


}

基本上,我只是找到三个数字中的最大值、最小值和中间值。然后测试字母 A、B 或 C。

如果我输入 1 5 3 和 ABC(第一个例子),它只会打印出 1 3。 对于第二个例子,它只打印出 6 2。

是什么导致了这个错误,有没有更好的方法来做这个算法?

【问题讨论】:

  • 造成这个错误的原因 -- 这是家庭作业吗?如果是这样,是不是试图发现和修复你自己的错误是该任务的一部分?你做了什么调试?您是否单步执行了您的计划,以查看它在哪里偏离了您的计划?
  • 刷新标准输出或在最后一个println之后打印一个新行。
  • 请澄清"wanna"?
  • 有没有更好的方法来做这个算法 -- 尝试使用这个方法根据你的标准对 4、5 或 20 个数字进行排序。您将很快看到您的方法变得多么不切实际。那么当您说“更好的算法”时,您是指一般情况下吗?
  • 为了便于阅读和理解:1) 通过一个空格分隔代码块(forifelsewhiledo...whileswitchcasedefault)线。 2) 一致地缩进代码。在每个(真实的或可选的)左大括号“{”后缩进。在每个(真实的或可选的)右大括号“}”之前取消缩进。建议每个缩进级别为 4 个空格。 3) 遵循公理:每行只有一个语句,并且(最多)每条语句有一个变量声明。

标签: c arrays algorithm sorting


【解决方案1】:

首先,mid计算错误(逻辑错误),应该是:

for(i = 0; i < 3; i++){
    if(array[i] != max && array[i]!= min) // AND not OR
     {
      mid = array[i];
      break; // once found you can break
    }

然后是臭名昭著的“scanf 吃掉最后一个换行错误”,它将\n 放入A,因为您之前输入了数字列表,并且也移动了其余的变量。你可以这样修复它:

scanf(" %c%c%c",&A,&B,&C);

【讨论】:

  • 我又忘记了这个臭名昭著的错误!谢谢!我在你的帮助下成功了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-04
相关资源
最近更新 更多