SQL資料庫程式設計大賽(第一期)

2021-08-25 19:11:32 字數 2082 閱讀 8084

本期題目:5x5方格棋盤難題

在5x5的方格棋盤中(如圖),每行、列、斜線(斜線不僅僅包括對角線)最多可以放兩個球,如何擺放才能放置最多的球,這樣的擺法總共有幾種?輸出所有的擺法。

要求:用一句sql實現。

輸出格式:從方格棋盤第一行至第5行,每行從第一列到第5列依次輸出,0表示不放球,1表示放球。例如:1001000000000000000000000。一行輸出乙個行號和乙個解,按解所在的列字串順序從大到小排序。

資料庫平台:適用oracle、ms sql sever,版本(oracle推薦10gr2(包含)以上版本、ms sql sever推薦2008版本)

原文見:

參賽者答案:

我提交的答案:

with a as ( select 1 c1,1 c2,0 c3,0 c4,0 c5 from dual union all select 1,0,1,0,0 from dual union all select 1,0,0,1,0 from dual union all select 1,0,0,0,1 from dual union all select 0,1,1,0,0 from dual union all select 0,1,0,1,0 from dual union all select 0,1,0,0,1 from dual union all select 0,0,1,1,0 from dual union all select 0,0,1,0,1 from dual union all select 0,0,0,1,1 from dual) select rownum rn,s from ( select r1.c1||r1.c2||r1.c3||r1.c4||r1.c5 ||r2.c1||r2.c2||r2.c3||r2.c4||r2.c5 ||r3.c1||r3.c2||r3.c3||r3.c4||r3.c5 ||r4.c1||r4.c2||r4.c3||r4.c4||r4.c5 ||r5.c1||r5.c2||r5.c3||r5.c4||r5.c5 s from a r1, a r2, a r3, a r4, a r5 where r1.c1+r2.c1+r3.c1+r4.c1+r5.c1<=2 and r1.c2+r2.c2+r3.c2+r4.c2+r5.c2<=2 and r1.c3+r2.c3+r3.c3+r4.c3+r5.c3<=2 and r1.c4+r2.c4+r3.c4+r4.c4+r5.c4<=2 and r1.c5+r2.c5+r3.c5+r4.c5+r5.c5<=2 and r1.c3+r2.c2+r3.c1<=2 and r1.c4+r2.c3+r3.c2+r4.c1<=2 and r1.c5+r2.c4+r3.c3+r4.c2+r5.c1<=2 and r2.c5+r3.c4+r4.c3+r5.c2<=2 and r3.c5+r4.c4+r5.c3<=2 and r3.c1+r4.c2+r5.c3<=2 and r2.c1+r3.c2+r4.c3+r5.c4<=2 and r1.c1+r2.c2+r3.c3+r4.c4+r5.c5<=2 and r1.c2+r2.c3+r3.c4+r4.c5<=2 and r1.c3+r2.c4+r3.c5<=2 order by s desc);

解題思路:

1、先將每行可以放2個棋子的排列組合全部列出,用union all生成記錄集。

2、用笛卡爾連線5個表,生成所有行滿足要求的排列組合(第行2個棋子)。

3、去除列和斜邊不滿足要求的記錄。

評委意見:

思路和**簡明,結果排序正確,效能良好,寫法直截了當,但未說明最大值=10的依據。既然已經預設了每行各有兩個球,可以推斷每列有且僅有兩個球,下面的列判斷可以改進為=2而不是<=2。

個人分析:

1、每行都肯定有2個棋子的假定是比較武斷的,扣分是應該的,除非自己先用演算法或數學方法證明(應該可以證明,但我還不會)。

2、列舉每行都有2個棋子的**比較難看,擴充套件性不好,可以改進(第二期改進了)。

3、用笛卡爾連線5個表,假如有行數不是5則需要修改sql,擴充套件性不好。

4、sql整體效能不錯,相對其他人的**簡單易懂。

5、沒有注釋,主要原因是自己認為**邏輯較簡單,評委肯定能看懂,最後還是被扣分了。

規劃小結(第一期)

一月一小結,這是規劃裡既定的方案,而從正式開學大現在也剛有31天了,所以寫下第一期的規劃小結,和有關於下一期的規劃安排。在第一期的學習中,其實是在原本的規劃上有一定小的調整的,總結的概括如下 第一 調整了對於bootloader的學習,在這一期主要將bootloader進行了乙個系統的了解,而並未著...

總結做完第一期專案

首先,對於這個專案,需求不是很明確,然後要到交貨的時候,都還在趕,還在添需求,給研發來說,心驚膽顫,因為怕新增的會有影響。所以,一定在前期,先把需求整理好。如果對需求沒有理解充分,就及時的與客戶交流。當然,也會遇到傳說中的不好交流的客戶,給研發人員來說,那就是一種壓力,所以不想去理睬客戶。但是最後傷...

第一期 第八題

a b problem too problem description this problem is also a a b problem,but it has a little difference,you should determine does a b could be divided w...