论坛首页 招聘求职论坛

腾讯公司费解的sql面试题,都来看看,留下你的见解

浏览 46748 次
精华帖 (3) :: 良好帖 (10) :: 隐藏帖 (1)
作者 正文
   发表时间:2009-07-14  
風一樣的男子 写道
其实 小小+霸霸+王王 是障碍。。。完全可用 xx+yy+zz

用xyz一下就就明白了。
0 请登录后投票
   发表时间:2009-07-14  
恩  是的
把他看成XYZ一下就明白了
0 请登录后投票
   发表时间:2009-07-14   最后修改:2009-07-14
算法:
89 * x2 = x1 + 10 * x0

MySQL:
		create table `num`(
		`x` int(11) unsigned,
		unique key (`x`)
		)

		Engine = Innodb, default charset  utf8;
		insert into `num` values (0);
		insert into `num` values (1);
		insert into `num` values (2);
		insert into `num` values (3);
		insert into `num` values (4);
		insert into `num` values (5);
		insert into `num` values (6);
		insert into `num` values (7);
		insert into `num` values (8);
		insert into `num` values (9);
		
		select x2.x as '小',x1.x as '霸',x0.x as '王'
		from num as x2,num as x1,num as x0
		where x2.x * 89 = (x1.x + x0.x * 10);


Oracle10g:
		drop table num cascade constraints;
		create table num  (
		   x NUMBER(1) not null,
		   CONSTRAINT "NUM_UK_X" UNIQUE ("X")
		);

		insert into num values (0);
		insert into num values (1);
		insert into num values (2);
		insert into num values (3);
		insert into num values (4);
		insert into num values (5);
		insert into num values (6);
		insert into num values (7);
		insert into num values (8);
		insert into num values (9);
		
		select x2.x "小",x1.x "霸",x0.x "王"
		from num x2,num x1,num x0
		where x2.x * 89 = (x1.x + x0.x * 10);
0 请登录后投票
   发表时间:2009-07-14  
第一次见到sql解答的,见识了。
0 请登录后投票
   发表时间:2009-07-14   最后修改:2009-07-14
我以数学的方法来做此题

题目实际上是方程
10x+x+10y+y+10z+z = 100x+10y+z(x,y,z都是0到9的正整数)
简化得89x-y-10z = 0
y = 89x-10Z

特解(x,y,z)=(10,0,89)

y = 89-10t(t为整数)

0=<y<=9
得出
0=<89-10t<=9
于是t = 8,y = 9

现在89x-10z = 9
0=<x<=9而且x是正整数
0=<z<=9而且z是正整数
0=<10z = 89x-9<=90
于是9=<89x<=99
x只能取1
代入89x-10z = 9,
得89 - 10z = 9
z = 8

于是可以得出解为(1,9,8)
0 请登录后投票
   发表时间:2009-07-14  
langhua9527 写道
icefishc 写道
 create table n_table (n int)  -- n 为 0..9

select a.n, b.n, c.n
from n_table a, n_table b, n_table c
where 11 * (a.n + b.n + c.n) = a.n * 100 + b.n * 10 + c.n 


大哥,你太猛了

晕,大哥你怎么知道这个题目是十进制的。。。如果是2进制呢。。。这个题目有漏洞
0 请登录后投票
   发表时间:2009-07-14  
小小+霸霸+王王=小霸王
小=1,霸=9,王=8

1分钟内推导一下就可以解决。
令小为x,霸为y,王为z。
3个2位数相加,x只能是1或者2。
由个位数相加可知,y=10-x,也就是9或者8。
结合考虑十位数,
1: x=1,y=9,有19z-110=zz,则z=8
2: x=2,y=8,有28z-110=zz,则z=17,无解

原文是 用sql求证, 不是求解?

知道推导规律,上面的sql也可以简化一下了。
0 请登录后投票
   发表时间:2009-07-14  
都是马后炮,还是最早那位用sql解出来的大哥猛!
0 请登录后投票
   发表时间:2009-07-14  
laogao3232 写道
都是马后炮,还是最早那位用sql解出来的大哥猛!

让我想起一句经典批评用语:事后诸葛亮,事前猪一样~
0 请登录后投票
   发表时间:2009-07-14  
Oracle:
SELECT a.x,b.x,c.x FROM
(SELECT rownum x FROM DUAL connect by rownum < 10) a,
(SELECT rownum x FROM DUAL connect by rownum < 10) b,
(SELECT rownum x FROM DUAL connect by rownum < 10) c
WHERE 11 * (a.x + b.x + c.x) = (a.x*100 + b.x * 10 + c.x);
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics