今天看到个SW测试题目,看到同事们用Java写,我也写了个SQL的,题如下;
-----------------------------------------------------------------
由两个正整数相乘组成序列。例如,4和20两个数。通过相乘可得到的结果,按由小到大的顺序排列,则得到 4, 4*4, 20, 4*4*4, 4*20... 序列。再例如5和7两个数,则会得到5, 7, 5*5, 5*7, ...序列。假如2和100两个数字,序列结果为2, 22, 23, 24, 25, 26, 100, 27, 2*100, 28, ... 序列中第十个小的数是28=256。
相乘所得序列会出现重复值。例如,2和4两个数时其序列为2, 22, 4, 2*4, 23, ... 但实际上22 和4是相同,而且2*4和 23 也相同。这种情况只视为一个值。即,这种情况序列的值应该是2, 4, 8, 16, 32, ...去掉重复的值,序列中第五个小的值是32而非8。
编写程序实现由两个正整数相乘所得序列中,找出第十个小的数。第十个小的数不应该溢出整数型范围.(不超过231-1)
-----------------------------------------------------------------
WITH T AS (
SELECT 2 N FROM DUAL UNION
SELECT 7 N FROM DUAL
)
,T1 (A,N) AS (
SELECT 1,N FROM T
UNION ALL
SELECT T1.A+1,T1.N*T.N
FROM T1,T
WHERE T1.A+1 < 10
)
SELECT DISTINCT N
FROM (
SELECT T1.N ,DENSE_RANK()OVER(ORDER BY T1.N) RN
FROM T1
)
WHERE RN <= 10
;
N
----------
2
4
7
8
14
16
28
32
49
56
10 rows selected
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13696961/viewspace-2107372/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13696961/viewspace-2107372/