“盛拓傳媒杯”SQL資料庫程式設計大賽第一期程式碼
在5X5的方格棋盤中(如圖),每行、列、斜線(斜線不僅僅包括對角線)最多可以放兩個球,如何擺放才能放置最多的球,這樣的擺法總共有幾種?輸出所有的擺法。
要求:用一句SQL實現。
輸出格式:從方格棋盤第一行至第5行,每行從第一列到第5列依次輸出,0表示不放球,1表示放球。例如:1001000000000000000000000。一行輸出一個行號和一個解,按解所在的列字串順序從大到小排序。
要求:用一句SQL實現。
輸出格式:從方格棋盤第一行至第5行,每行從第一列到第5列依次輸出,0表示不放球,1表示放球。例如:1001000000000000000000000。一行輸出一個行號和一個解,按解所在的列字串順序從大到小排序。
WITH
EVERY_CELL--每個格子的兩種情況
AS
( SELECT 1 P1 FROM DUAL
UNION
SELECT 0 FROM DUAL
),
EVERY_ROW--每行的情況
AS
(
SELECT A.P1 P1,B.P1 P2,C.P1 P3,D.P1 P4,E.P1 P5
FROM EVERY_CELL A,EVERY_CELL B,EVERY_CELL C,EVERY_CELL D,EVERY_CELL E
WHERE A.P1+B.P1+C.P1+D.P1+E.P1<=2
),
RESULT--五行的結果
AS
(
SELECT A1.P1 W1,A1.P2 W2,A1.P3 W3,A1.P4 W4,A1.P5 W5,
A2.P1 W6,A2.P2 W7,A2.P3 W8,A2.P4 W9,A2.P5 W10,
A3.P1 W11,A3.P2 W12,A3.P3 W13,A3.P4 W14,A3.P5 W15,
A4.P1 W16,A4.P2 W17,A4.P3 W18,A4.P4 W19,A4.P5 W20,
A5.P1 W21,A5.P2 W22,A5.P3 W23,A5.P4 W24,A5.P5 W25
FROM EVERY_ROW A1,EVERY_ROW A2,EVERY_ROW A3,EVERY_ROW A4,EVERY_ROW A5
WHERE A1.P1+A2.P1+A3.P1+A4.P1+A5.P1<=2
AND A1.P2+A2.P2+A3.P2+A4.P2+A5.P2<=2
AND A1.P3+A2.P3+A3.P3+A4.P3+A5.P3<=2
AND A1.P4+A2.P4+A3.P4+A4.P4+A5.P4<=2
AND A1.P5+A2.P5+A3.P5+A4.P5+A5.P5<=2
AND A1.P1+A2.P2+A3.P3+A4.P4+A5.P5<=2
AND A1.P2+A2.P3+A3.P4+A4.P5<=2
AND A1.P3+A2.P4+A3.P5<=2
AND A1.P4+A2.P5<=2
AND A2.P1+A3.P2+A4.P3+A5.P4<=2
AND A3.P1+A4.P2+A5.P3<=2
AND A4.P1+A5.P2<=2
AND A1.P2+A2.P1<=2
AND A1.P3+A2.P2+A3.P1<=2
AND A1.P4+A2.P3+A3.P2+A4.P1<=2
AND A1.P5+A2.P4+A3.P3+A4.P2+A5.P1<=2
AND A2.P5+A3.P4+A4.P3+A5.P2<=2
AND A3.P5+A4.P4+A5.P3<=2
AND A4.P5+A5.P4<=2
),
RESULT_MAX--求出符合條件的結果最大值
AS
(
SELECT MAX(W1+W2+W3+W4+W5+W6+W7+W8+W9+W10+W11+W12+W13+W14+W15+W16+W17+W18+W19+W20+W21+W22+W23+W24+W25) VAL FROM RESULT
),
ISRESULT--排序結果
AS
(
SELECT W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,W13,W14,W15,W16,W17,W18,W19,W20,W21,W22,W23,W24,W25 FROM RESULT,RESULT_MAX
WHERE W1+W2+W3+W4+W5+W6+W7+W8+W9+W10+W11+W12+W13+W14+W15+W16+W17+W18+W19+W20+W21+W22+W23+W24+W25=RESULT_MAX.VAL
ORDER BY W1 DESC,W2 DESC,W3 DESC,W4 DESC,W5 DESC,W6 DESC,W7 DESC,W8 DESC,W9 DESC,W10 DESC,W11 DESC,W12 DESC,W13 DESC,W14 DESC,W15 DESC,W16 DESC,W17 DESC,W18 DESC,W19 DESC,W20 DESC,W21 DESC,W22 DESC,W23 DESC,W24 DESC,W25 DESC
)
SELECT ROWNUM,IR.*FROM ISRESULT IR
EVERY_CELL--每個格子的兩種情況
AS
( SELECT 1 P1 FROM DUAL
UNION
SELECT 0 FROM DUAL
),
EVERY_ROW--每行的情況
AS
(
SELECT A.P1 P1,B.P1 P2,C.P1 P3,D.P1 P4,E.P1 P5
FROM EVERY_CELL A,EVERY_CELL B,EVERY_CELL C,EVERY_CELL D,EVERY_CELL E
WHERE A.P1+B.P1+C.P1+D.P1+E.P1<=2
),
RESULT--五行的結果
AS
(
SELECT A1.P1 W1,A1.P2 W2,A1.P3 W3,A1.P4 W4,A1.P5 W5,
A2.P1 W6,A2.P2 W7,A2.P3 W8,A2.P4 W9,A2.P5 W10,
A3.P1 W11,A3.P2 W12,A3.P3 W13,A3.P4 W14,A3.P5 W15,
A4.P1 W16,A4.P2 W17,A4.P3 W18,A4.P4 W19,A4.P5 W20,
A5.P1 W21,A5.P2 W22,A5.P3 W23,A5.P4 W24,A5.P5 W25
FROM EVERY_ROW A1,EVERY_ROW A2,EVERY_ROW A3,EVERY_ROW A4,EVERY_ROW A5
WHERE A1.P1+A2.P1+A3.P1+A4.P1+A5.P1<=2
AND A1.P2+A2.P2+A3.P2+A4.P2+A5.P2<=2
AND A1.P3+A2.P3+A3.P3+A4.P3+A5.P3<=2
AND A1.P4+A2.P4+A3.P4+A4.P4+A5.P4<=2
AND A1.P5+A2.P5+A3.P5+A4.P5+A5.P5<=2
AND A1.P1+A2.P2+A3.P3+A4.P4+A5.P5<=2
AND A1.P2+A2.P3+A3.P4+A4.P5<=2
AND A1.P3+A2.P4+A3.P5<=2
AND A1.P4+A2.P5<=2
AND A2.P1+A3.P2+A4.P3+A5.P4<=2
AND A3.P1+A4.P2+A5.P3<=2
AND A4.P1+A5.P2<=2
AND A1.P2+A2.P1<=2
AND A1.P3+A2.P2+A3.P1<=2
AND A1.P4+A2.P3+A3.P2+A4.P1<=2
AND A1.P5+A2.P4+A3.P3+A4.P2+A5.P1<=2
AND A2.P5+A3.P4+A4.P3+A5.P2<=2
AND A3.P5+A4.P4+A5.P3<=2
AND A4.P5+A5.P4<=2
),
RESULT_MAX--求出符合條件的結果最大值
AS
(
SELECT MAX(W1+W2+W3+W4+W5+W6+W7+W8+W9+W10+W11+W12+W13+W14+W15+W16+W17+W18+W19+W20+W21+W22+W23+W24+W25) VAL FROM RESULT
),
ISRESULT--排序結果
AS
(
SELECT W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,W13,W14,W15,W16,W17,W18,W19,W20,W21,W22,W23,W24,W25 FROM RESULT,RESULT_MAX
WHERE W1+W2+W3+W4+W5+W6+W7+W8+W9+W10+W11+W12+W13+W14+W15+W16+W17+W18+W19+W20+W21+W22+W23+W24+W25=RESULT_MAX.VAL
ORDER BY W1 DESC,W2 DESC,W3 DESC,W4 DESC,W5 DESC,W6 DESC,W7 DESC,W8 DESC,W9 DESC,W10 DESC,W11 DESC,W12 DESC,W13 DESC,W14 DESC,W15 DESC,W16 DESC,W17 DESC,W18 DESC,W19 DESC,W20 DESC,W21 DESC,W22 DESC,W23 DESC,W24 DESC,W25 DESC
)
SELECT ROWNUM,IR.*FROM ISRESULT IR
思路清晰有必要的註釋,在構造EVERY_ROW的時候可以把所有位的求和先算好,後面就不用寫得那麼辛苦。RESULT_MAX可改用分析函式實現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25323853/viewspace-689673/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL資料庫程式設計大賽隨感SQL資料庫程式設計
- SQL資料庫程式設計大賽開幕SQL資料庫程式設計
- 2019 力扣杯-全國高校春季程式設計大賽力扣程式設計
- 程式設計大賽WBS程式設計
- 藍橋杯大賽——驅動程式
- 大話資料庫程式設計規範資料庫程式設計
- ITPUB SQL大賽第一期SQL
- 軟體工程系成功承辦藍橋杯程式設計大賽軟體工程程式設計
- SQL備份資料庫程式碼SQL資料庫
- 好程式設計師大資料培訓分享之MySQL資料庫SQL簡介程式設計師大資料MySql資料庫
- java 資料庫程式設計(一)JDBC連線Sql Server資料庫Java資料庫程式設計JDBCSQLServer
- 第二屆資料安全大賽“數信杯”資料安全大賽 WP
- CU--Shell程式設計大賽程式設計
- 幽默:程式設計師吹牛大賽程式設計師
- QZEZ第一屆“飯吉圓”杯程式設計競賽程式設計
- 第六屆華為創新杯程式設計大賽-進階1第1輪程式設計
- 第六屆華為創新杯程式設計大賽-進階1第3輪程式設計
- 2014第六屆華為創新杯程式設計大賽初賽解題報告程式設計
- 2014年藍橋杯程式設計大賽山東省賽區成績公佈程式設計
- 資料庫實驗八 資料庫程式設計資料庫程式設計
- 資料庫實驗五:資料庫程式設計資料庫程式設計
- 2024“圖森未來杯”程式設計邀請賽程式設計
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 密碼發生器(程式設計大題)C++程式設計密碼
- limanmanExp資料庫審計設計思路與重要程式碼資料庫
- 2012年第三屆藍橋杯C/C++程式設計本科B組省賽 大數乘法(程式碼填空)C++程式設計
- 【藍橋杯】“萌新首秀”全國高校新生程式設計排位賽3程式設計
- 玖章算術CEO葉正盛:程式設計師必須掌握的資料庫原理程式設計師資料庫
- Go Web 程式設計之 資料庫GoWeb程式設計資料庫
- 抽獎小程式資料庫設計資料庫
- python mysql資料庫程式設計PythonMySql資料庫程式設計
- WINDOWS CE 資料庫程式設計 (轉)Windows資料庫程式設計
- 資料庫程式設計注意事項資料庫程式設計
- JAVA程式與資料庫設計困惑~Java資料庫
- 資料庫程式設計方法總結資料庫程式設計
- Python SQLite資料庫程式設計PythonSQLite資料庫程式設計
- 程式設計天才“樓教主”—— 專訪兩屆“黑客杯”世界程式設計大賽季軍、清華大學博士生樓天城...程式設計黑客
- Go Web 程式設計--應用資料庫GoWeb程式設計資料庫
- Delphi資料庫程式設計教程(九) (轉)資料庫程式設計