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