在C语言中如何用最简洁的方式表示出三个数中的最大数,最小数,中间数

[复制链接]
查看11 | 回复3 | 2007-10-12 21:50:56 | 显示全部楼层 |阅读模式
最简:#define MAX(a,b,c) ((a>b?a:b)>c?(a>b?a:b):c)#define MIN(a,b,c) ((ab?(b>c?b:(a>c?c:a)):(b>c?(a=b){max=a;min=b;}else{min=a;max=b;}if(c=max){mid=max;max=c;}else mid=c;你到底要的是语句简洁还是算法复杂度的简洁啊?我写的是算法复杂度简洁的,最多执行三次比较和四次赋值,真不知道还有没有比这复杂度还简洁的了。
回复

使用道具 举报

千问 | 2007-10-12 21:50:56 | 显示全部楼层
#include"stdio.h"int main(){int a,b,c,max,min,mid;scanf("%d %d %d",&a,&b,&c);a>b&&a>c?(max=a,b>c?(mid=b,min=c):(mid=c,min=b)):(b>c?(max=b,a>c?(mid=a,min=c):(mid=c,min=a)):(max=c,a>b?(mid=a,min=b):(min=a,mid=b)));/*太长了,只好分开两行*/printf("max=%d,mid=%d,min=%d",max,mid,min);}
回复

使用道具 举报

千问 | 2007-10-12 21:50:56 | 显示全部楼层
#include"iostream.h" /*对:天涯海角_07程序稍加修改*/int main(){ int x,y,z; int min,max,mid; printf("请输入三个数:"); scanf("%d %d %d",&x,&y,&z); min=(x>y?y:x)>z?z:(x>y?y:x); max=(x>y?x:y)>z?(x>y?x:y):z; mid=x+y+z-max-min;printf("最小数为:%d\n",min); printf("最大数为:%d\n",max); printf("中间数为:%d",mid); }
回复

使用道具 举报

千问 | 2007-10-12 21:50:56 | 显示全部楼层
#includevoid main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);if(a>b&&a>c)printf("%d",a);elseif(b>c)printf("%d",b);elseprintf("%d",c);}不知道算不算最简单,已测试int a=3,b=1,c=2,temp;int max,min,middle;max = (temp=(a>b)?a:b)>c?temp:c;min = (temp=(a (b) ? ((a) > (c) ? (a) : (c)) : (b) > (c) ? (b) : (c))
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行