C语言算法求三个数的最大值,这样的算法有问题吗?

futiantian 2011-11-29 09:54:23
main()
{
int n1,n2,n3,max;
scanf("%d%d%d",&n1,&n2,&n2);
if(n1>n2 && n1>n3) max=n1;
if(n2>n1 && n2>n3) max=n2;
if(n3>n1 && n3>n2) max=n3;
printf("%d",max);
}
这个求三数的最大值算法有问题吗?总觉得有漏洞,请大家努力分析,能举出一些特例来吗?
...全文
673 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
卡卡_苏米 2011-11-30
  • 打赏
  • 举报
回复
int main()
{
int n1,n2,n3,max;
max=n1;
scanf("%d%d%d",&n1,&n2,&n2);
if(n1>n2 && n1>n3) max=n1;
else if(n2>n1 && n2>n3) max=n2;
else
max=n3;
printf("%d",max);
}
gsy100 2011-11-29
  • 打赏
  • 举报
回复
应该先给max赋值为其中任意一个 然后剩下两个再和max比较
蛮牛儿 2011-11-29
  • 打赏
  • 举报
回复

int maxvalue(int a, int b)
{
return ((a+b)+abs(a-b))/2);
}
……
main()
{
……
max = maxvalue(maxvalue(a,b),c);
}
ProgrammingRing 2011-11-29
  • 打赏
  • 举报
回复
抱歉。。上面的错了。。
max = a;
if(max < b)
max = b;
if(max < c)
max = c;
安生 2011-11-29
  • 打赏
  • 举报
回复
其实一个 return a>b?(a>c?a:c):(b>c?b:c) 不就好了?
或者 max(const int& a,const int& b)
{
return a>b?a:b;
}

然后调用max(max(a,b),c);
naoshi 2011-11-29
  • 打赏
  • 举报
回复
scanf("%d%d%d",&n1,&n2,&n3); //这样吧
测试 7 7 5
输出 5
错误
ProgrammingRing 2011-11-29
  • 打赏
  • 举报
回复
噢。。看见一楼回复。。开头再加一个
if(a == b && b == c)
max = a;
Night_Fate 2011-11-29
  • 打赏
  • 举报
回复
max 未初始化,造成相等时 结果不确定
wjmde678 2011-11-29
  • 打赏
  • 举报
回复
比如都是三个相等的数 你会输出一个很怪异的数!
安生 2011-11-29
  • 打赏
  • 举报
回复
n1 n2 n3相等,会输出一个随机数。
ProgrammingRing 2011-11-29
  • 打赏
  • 举报
回复
没错吧,下面这样会不会好点?
if(a > b && a > c)
max = a;
esle if(b > a && b > c)
max = b;
else
max = c;
IVERS0N 2011-11-29
  • 打赏
  • 举报
回复
scanf("%d%d%d",&n1,&n2,&n2);

都相等的时候 max没赋值
wang7535067 2011-11-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 feidaosh 的回复:]

其它的先不说,你的问题太简单了,>号改成>=不就什么都OK了,反正你只要一个输出值。。。
if(n1>=n2 && n1>=n3) max=n1;
if(n2>=n1 && n2>=n3) max=n2;
if(n3>=n1 && n3>=n2) max=n3;
[/Quote]
正解
feidaosh 2011-11-29
  • 打赏
  • 举报
回复
其它的先不说,你的问题太简单了,>号改成>=不就什么都OK了,反正你只要一个输出值。。。
if(n1>=n2 && n1>=n3) max=n1;
if(n2>=n1 && n2>=n3) max=n2;
if(n3>=n1 && n3>=n2) max=n3;
猪头小哥 2011-11-29
  • 打赏
  • 举报
回复
刚又试了一遍 关于输出最大数 上面的都说了。 我说一个没人说的 就是局部变量你必须的的初始化,我之前说在VS2010上面运行不了 它的提示就是那几个局部变量没有初始化,所以要有这个好的习惯,全局变量默认值是0。
luffy1010 2011-11-29
  • 打赏
  • 举报
回复
scanf("%d%d%d",&n1,&n2,&n2);
这里怎么两个n2?
luffy1010 2011-11-29
  • 打赏
  • 举报
回复
这样还是不行。
7 8 7<enter>
输出结果怪异!
[Quote=引用 6 楼 programmingring 的回复:]

噢。。看见一楼回复。。开头再加一个
if(a == b && b == c)
max = a;
[/Quote]
AndyZhang 2011-11-29
  • 打赏
  • 举报
回复
你输入3个相同的数,估计每次输出的都不一样,估计是一个很大的数,或者是一个很小的负数吧
AndyZhang 2011-11-29
  • 打赏
  • 举报
回复
看完代码,我就想问楼组,如果a==b==c如何办?
lhp_1 2011-11-29
  • 打赏
  • 举报
回复
这样怎么样呢?

main()
{
int n1,n2,n3,max=0;
scanf("%d%d%d",&n1,&n2,&n2);
if
{
(n1!=n2!=n3 && n1>n2>n3)
max=n1;
eles if(n1!=n2!=n3 && n2>n1>n3)
max=n2;
eles
max=n3
}
return max

}
加载更多回复(1)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧