【发布时间】: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