|
让你们转oracle,弄个你不好转的,嘿嘿
With
E1(n, c) As
(
Select 0, 0
Union All
Select n+1, c+1 From E1 Where n < 36
),
E2(n, c) As
(
Select 1, Cast(Cast(1 As Char(10)) As Varchar(max))
Union All
Select E2.n + 1, Cast(E2.c + Cast(T.c As Char(10)) As Varchar(max))
From E2 Cross Apply
(
Select f, Case When c1 > c2 Then c1 Else c2 End c,
row_number() Over (Order By Case When c1 > c2 Then c1 Else c2 End) r
From
( -- 需要计算第(E2.n+1)层,从1层到n+1层测试
Select E1.n + 1 f, -- 在E1.n + 1层测试
1 + E1.c c1, -- 破了,那么一层一层测
-- 否则没破,还有两个蛋, 还有E2.n + 1 - (E1.n + 1)层需要测几次
1 + Cast(Substring(E2.c, (E2.n - E1.n - 1) * 10 + 1, 10) As Int) c2
From E1 Where E1.n > 0 And (E1.n + 1) <= (E2.n + 1)
) S
) T
Where E2.n < 36 And T.r = 1
)
Select E1.n, Substring(E2.c, (E1.n - 1) * 10 + 1, 10) c
From E1, E2 Where E2.n = 36 And E1.n > 0
n c
-----------
1 1
2 2
3 2
4 3
5 3
6 3
7 4
8 4
9 4
10 4
11 5
12 5
13 5
14 5
15 5
16 6
17 6
18 6
19 6
20 6
21 6
22 7
23 7
24 7
25 7
26 7
27 7
28 7
29 8
30 8
31 8
32 8
33 8
34 8
35 8
36 8
(36 row(s) affected)
其实这个数列看规律应当直接可以出通项公式,懒得写了,人家早研究过了,1个1,2个2,3个3.... |
|