c - 按特定顺序对三个数字进行排序

标签 c arrays algorithm sorting

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

因此,在这个例子中,用户输入三个数字: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。

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

最佳答案

首先,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);

关于c - 按特定顺序对三个数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49765903/

相关文章:

基于循环图中先前节点查找节点成本的算法

string - 我如何找到像自动完成这样的最短文本?

c++ - 二维数组中指针衰减后的大小

c - %c 如何在 C 程序中打印值?

c - 如何在C中写入可执行文件的输入?

c - ARM:如果中断被禁用,是否需要 LDRX/STRX?

arrays - 根据行索引转换 Excel 列表

C# 从 Color 获取所有颜色

python - 理解BST、Python中序遍历的逻辑

java - 在C语言中更改变量的值时,是创建新的原语还是当前原语被突变?