一道面试的题目(求最大值)
哪为高手能帮帮我,
在不使用if,while,do~~while等语句,不使用关系运算符,不使用MAX(),MIN()的情况下,怎样比较输入的a,b两个数的大小。(注:实现并不知道输入的数的大小)
问题点数:0、回复次数:59Top
1 楼PPower(月亮光光,照地堂)回复于 2004-09-02 22:30:31 得分 0
return bool(a-b);Top
2 楼snow810211(阳光)回复于 2004-09-02 22:31:37 得分 0
好怪~我也关注中Top
3 楼PPower(月亮光光,照地堂)回复于 2004-09-02 22:31:56 得分 0
return a-b ;
這樣才行,返回正數,表示a > b , 負數表示 a < b , 0表示 a == b 。
Top
4 楼PPower(月亮光光,照地堂)回复于 2004-09-02 22:34:39 得分 0
template <class T>
T Compare(T &a, T &b)
{ return inta-b ; }Top
5 楼ma100()回复于 2004-09-02 22:36:16 得分 0
MAX(int a,int b)
{
return a -b ? a:b;
}Top
6 楼hcj2002(流浪者·躬自厚而薄责于人 )回复于 2004-09-02 23:11:56 得分 0
template <class T>
T Compare(T &a, T &b)
{ return int (a-b) ; }
Top
7 楼Vigorcsdn(混分来滴~)回复于 2004-09-02 23:19:21 得分 0
return a-b ? a:b;
Top
8 楼alever513(戴帽子的(落脚杭州))回复于 2004-09-02 23:31:26 得分 0
?: 这个不是关系运算符~
--
所以可以这样:
return (a-b > 0.0) ? a:b;Top
9 楼ftkghost(小鹏)回复于 2004-09-02 23:43:12 得分 0
Max=a>b?a:b
Min=a+b-MAxTop
10 楼InToTheSea(编程浪子)回复于 2004-09-02 23:47:04 得分 0
return (a-b > 0.0) ? a:b;
还是用了关系运算符啊Top
11 楼ftkghost(小鹏)回复于 2004-09-03 09:27:48 得分 0
如果能不用关系运算符把a-b转化为2进制,符号位为1代表负数即a<b
符号位为0则a>b
二进制值为0则a=b
不知道行不行?问题在于什么函数是把一个整数转换为2进制的
还有就是当a>0 b<0的时候a-b会不会超过整型变量表示的数值范围,超出后的值有可能会改变符号
请高手指点啊~~想不出来了~Top
12 楼improgrammer(无忌)回复于 2004-09-03 10:05:32 得分 0
既然你没有限制我用什么形式把我的判断告诉你,那我只用编码的方式把结果返回给你(A-B),告诉你我返回一个整数,如大于0则A大于B,小于0则B大于A,否则A==B。怎么使用这个结果,就是你的事了,反正我没有使用if。
问题是连if都不用,你最终怎么使用这个结果呢?哦,使用汇编吧?不要说连实现if的那几条机器指令都不许用!
我怀疑你的问题本身是否提得准确。
Top
13 楼oCplus(C++)回复于 2004-09-03 11:03:50 得分 0
map<int> mp;
mp.Insert(a);
mp.Insert(b);
mp.Sort();Top
14 楼diandian82(点点(nothing))回复于 2004-09-03 13:53:44 得分 0
这不是神经病么?本来挺简单的问题考虑那么复杂干什么?不要说这是测试我们的思维能力!Top
15 楼elegantboy(杰)回复于 2004-09-03 14:01:39 得分 0
用 ? : 语句
Top
16 楼ntxs(别人加薪我加班,数钱数到心发酸T_T)回复于 2004-09-03 17:35:15 得分 0
哈哈 三目运算符啊
int a, b;
cin>>a>>b;
return (a-b)>0 ? a : b;Top
17 楼wwwooowww(熔点)回复于 2004-09-03 19:09:36 得分 0
学习ing
Top
18 楼languagec(各有所求)回复于 2004-09-03 20:11:29 得分 0
int(a/b)
这个怎么样?
Top
19 楼languagec(各有所求)回复于 2004-09-03 20:15:24 得分 0
这个能判断两个正数的大小,负数的不知道Top
20 楼xteaj(半桶水)回复于 2004-09-03 20:23:31 得分 0
max = a>b?a:b;
min = a<b?a:b;Top
21 楼lark3(海鸥)回复于 2004-09-03 20:44:28 得分 0
ding
Top
22 楼rwdx(忆)回复于 2004-09-03 21:16:58 得分 0
languagec(各有所求.神志不清.重病!) ( ) 信誉:100
int(a/b)
这个怎么样?
a = 1 b =0 会怎样Top
23 楼mahongxi(烤鸡翅膀)(色摸)回复于 2004-09-03 21:26:22 得分 0
(a-b) >> 31
----------------test prog-----------
#include <stdio.h>
int main(int argc,char ** argv)
{
int a,b;
printf("enter numbers(a,b):");
scanf("%d,%d",&a,&b);
int c = (a-b) >> 31;
printf("c=%d",c);
if(c)
printf("\n%d<%d",a,b);
else
printf("\n%d>=%d",a,b);
}
Top
24 楼codekid(codekid)回复于 2004-09-03 21:40:35 得分 0
可能就是用三目吧 我也不太清楚Top
25 楼FreeFice(庄鱼)回复于 2004-09-03 22:44:43 得分 0
int Letter(int a,int b)
{
return (a-b)&0x80000000;
}
int Bigger(int a,int b)
{
return !((a-b)&0x80000000);
}Top
26 楼somedummy(某人马甲)回复于 2004-09-03 23:40:28 得分 0
楼上的在干什么?简直就是不知所云
到目前为止所有采用?:操作符的要不就是根本得不到正确答案(大部分是无法表达正确的意义,譬如
MAX(int a,int b)
{
return a -b ? a:b;
}
这个只有在a==b的时候才会返回b,否则都是返回a),要不就是不符合题意(使用了关系判断)Top
27 楼sea373(菜鸟都不是)回复于 2004-09-04 00:10:39 得分 0
关注中......Top
28 楼heksn(佳宁)回复于 2004-09-04 18:42:01 得分 0
学习Top
29 楼JianZhiZG(健之)回复于 2004-09-04 20:48:21 得分 0
#include <stdio.h>
void main()
{
int a,b,c;
scanf("%d%d",&a,&b);
c=a-b;
printf("%d\n",c & 0x8000 ? b:a);
}Top
30 楼cchuocp(井底之蛙)回复于 2004-09-04 22:10:15 得分 0
mahongxi(烤鸡翅膀)(色摸) 的方法非常好
(a-b) >> 31
如果a大于等于b,则a-b为0或正数,最高位为0,否则为负数,最高位为1。
Top
31 楼xteaj(半桶水)回复于 2004-09-04 22:22:07 得分 0
max(float a,float b)
{
float t1,t2;
t1 = a + b;
t2 = fabs(a-b);
return (t1 + t2)/2;Top
32 楼xteaj(半桶水)回复于 2004-09-04 22:23:32 得分 0
max(float a,float b)
{
float t1,t2;
t1 = a + b;
t2 = sqrt((a-b)*(a-b));//免得你说fabs中也用了判断语句
return (t1 + t2)/2;
}Top
33 楼xiaopeng_e(pp)回复于 2004-09-05 16:04:06 得分 0
int max = (a - b) & (0x80000000) ? b:a;
Top
34 楼wwwtony110(小风风)回复于 2004-09-05 16:10:46 得分 0
#include <iostream.h>
int main;
{
int a,b,c;
cin>>a;
cin>>b;
c=a-b;
cout<<c;
c为负~~~就B大~~~正就A大
Top
35 楼xteaj(半桶水)回复于 2004-09-05 16:11:37 得分 0
哥们,好像楼主没说是整数Top
36 楼FreeFice(庄鱼)回复于 2004-09-05 21:07:00 得分 0
int Letter(int a,int b)
{
return (a-b)&0x80000000;
}
int Bigger(int a,int b)
{
return !((a-b)&0x80000000);
}
int Max(int a,int b)
{
return Bigger(a,b)?a:b;
}
Top
37 楼Squall1009(钰枫)(找工作ing)回复于 2004-09-05 22:05:43 得分 0
感觉蛮无聊的.........Top
38 楼iicup(双杯献酒)回复于 2004-09-06 00:52:51 得分 0
(1)题目不清楚,
没有规定比较后的大小怎么表示。
(2)题目的一些限制是毫无必要的,
没有任何理由需要这种限制,
因此,只能说“浪费脑力”。
Top
39 楼iicup(双杯献酒)回复于 2004-09-06 00:57:17 得分 0
对了,
如果这是面试题,规定不能用MAX,MIN可以理解,
但不能用比较运算符没有任何理由。
因此,标准答案是:
“为什么不用比较运算苻?”Top
40 楼xiaopeng_e(pp)回复于 2004-09-07 10:49:03 得分 0
很多面试题都会这样限制,比如处理字符串不允许自己开辟buffer之类的,否则也太简单了。Top
41 楼forfoo(清风,迎晨)回复于 2004-09-07 12:36:08 得分 0
a+b+a-b,只要(a-b)是最大值和最小值的差就可以补足两倍最大值,除以2就可以了Top
42 楼forfoo(清风,迎晨)回复于 2004-09-07 12:38:21 得分 0
有人用了, 就是xteaj() ( ) 的方法Top
43 楼MaxDD(激活)回复于 2004-09-07 13:19:41 得分 0
xteaj() 的方法好啊。
学习学习。Top
44 楼socrazylee(我爱我的爸爸妈妈)(还我山河)回复于 2004-09-07 13:24:54 得分 0
这么无聊.浪费时间.1+1=2难道还非要证明出来吗?一看你面试的公司就是一个耍小聪明,没有效率的公司.现成的不用,不是有病就是脑袋积水Top
45 楼zhangyu666(咖啡)回复于 2004-09-07 16:58:25 得分 0
没有印度软件业发达就是这个道理,小聪明Top
46 楼nicewinds(伯伯)回复于 2004-09-07 17:09:01 得分 0
判断正负还是要用关系运算符,应该是要求把a或b输出来
mahongxi(烤鸡翅膀)(色摸) 用到if了Top
47 楼simonjp(学习学习)回复于 2004-09-09 15:06:11 得分 0
xteaj() 的方法好Top
48 楼demo001(给分是我最大的快乐)回复于 2004-09-09 15:43:17 得分 0
呵呵,学习ing....Top
49 楼dfwzy(小源)回复于 2004-09-09 16:12:47 得分 0
学习一下吧Top
50 楼NoSurrender(爱上编程)回复于 2004-09-09 16:27:36 得分 0
觉得如果用是模板的话,更有普遍性~Top
51 楼sunyolaw()回复于 2004-09-09 16:36:37 得分 0
用三目运算Top
52 楼tiemuzh777(初始化)回复于 2004-09-09 16:41:25 得分 0
这是一道中学的的代数题目,以前就已经解答过,当时的代数就没有逻辑概念,所以还是大家的一个基础问题。
学语言还是应该有比较强的数学基础。Top
53 楼angiec0313(安吉)回复于 2004-09-09 16:44:37 得分 0
return (a-b > 0.0) ? a:b;Top
54 楼soyer2001(疯人院の炽阳)回复于 2004-09-09 16:44:48 得分 0
好奇怪,用三目运算符不就可以了吗?
三目运算符 的 实质就是一个
if(a>b)
return a;
else
return b;
Top
55 楼pigja(朱健安)回复于 2004-09-09 17:36:53 得分 0
好象都没考虑溢出的问题Top
56 楼zhengguoshan(坚持-决不放弃)回复于 2004-09-09 21:27:16 得分 0
return a-b ? a:b;Top
57 楼CITABC(晨风1)回复于 2004-09-09 22:56:01 得分 0
学习ing
Top
58 楼66766(毁人不倦)回复于 2004-09-09 23:34:40 得分 0
如果是整数取(a-b)的符号位,用位操作运算,浮点数也是这个思路Top
59 楼goonhl(icebarg)回复于 2004-09-10 03:24:30 得分 0
同:PPower(月亮光光,照地堂)!Top




