SQL大赛——5X5方格棋盘难题
创始人
2024-07-25 08:51:06
0

“盛拓传媒杯”SQL大赛***期答题
本期题目:5X5方格棋盘难题

在5X5的方格棋盘中(如图),每行、列、斜线(斜线不仅仅包括对角线)最多可以放两个球,如何摆放才能放置最多的球,这样的摆法总共有几种?输出所有的摆法。
要求: 用一句SQL实现。
输出格式: 从方格棋盘***行至第5行,每行从***列到第5列依次输出,0表示不放球,1表示放球。例如:1001000000000000000000000。一行输出一个行号和一个解,按解所在的列字符串顺序从大到小排序。

数据库平台: 适用Oracle、MS SQL Sever,版本(Oracle推荐10gr2(包含)以上版本、MS SQL Sever推荐2008版本)

我个人的答案如下:
--构造0、1选项
with test as
(select '1' bit from dual union select '0' from dual),
--构造每行排列组合
combostring as
(
select replace(sys_connect_by_path(bit,'#'),'#') combo
from test
where level=5
connect by level<=5
),
--把“10001”的字符串,构造成可计算的数字
combo as
(select substr(combo,1,1) b1,substr(combo,2,1) b2,substr(combo,3,1) b3,substr(combo,4,1) b4,substr(combo,5,1) b5
from combostring),
--根据题目进行逻辑求解
allcombo as
(
select c1.b1||c1.b2||c1.b3||c1.b4||c1.b5||' '||c2.b1||c2.b2||c2.b3||c2.b4||c2.b5||' '||
c3.b1||c3.b2||c3.b3||c3.b4||c3.b5||' '||c4.b1||c4.b2||c4.b3||c4.b4||c4.b5||' '||c5.b1||c5.b2||c5.b3||c5.b4||c5.b5 combo,
RANK() OVER(ORDER BY
c1.b1+c1.b2+c1.b3+c1.b4+c1.b5+ c2.b1+c2.b2+c2.b3+c2.b4+c2.b5+ c3.b1+c3.b2+c3.b3+c3.b4+c3.b5+ c4.b1+c4.b2+c4.b3+c4.b4+c4.b5+ c5.b1+c5.b2+c5.b3+c5.b4+c5.b5 DESC) RANK
from combo c1,combo c2,combo c3,combo c4,combo c5
where c1.b1+c2.b1+c3.b1+c4.b1+c5.b1<=2
and c1.b2+c2.b2+c3.b2+c4.b2+c5.b2<=2
and c1.b3+c2.b3+c3.b3+c4.b3+c5.b3<=2
and c1.b4+c2.b4+c3.b4+c4.b4+c5.b4<=2
and c1.b5+c2.b5+c3.b5+c4.b5+c5.b5<=2
and c1.b1+c1.b2+c1.b3+c1.b4+c1.b5<=2
and c2.b1+c2.b2+c2.b3+c2.b4+c2.b5<=2
and c3.b1+c3.b2+c3.b3+c3.b4+c3.b5<=2
and c4.b1+c4.b2+c4.b3+c4.b4+c4.b5<=2
and c5.b1+c5.b2+c5.b3+c5.b4+c5.b5<=2
and c1.b1+c2.b2+c3.b3+c4.b4+c5.b5<=2
and c1.b5+c2.b4+c3.b3+c4.b2+c5.b1<=2
and c1.b2+c2.b3+c3.b4+c4.b5<=2
and c2.b1+c3.b2+c4.b3+c5.b4<=2
and c1.b3+c2.b4+c3.b5<=2
and c3.b1+c4.b2+c5.b3<=2
and c1.b4+c2.b3+c3.b2+c4.b1<=2
and c2.b5+c3.b4+c4.b3+c5.b2<=2
and c1.b3+c2.b2+c3.b1<=2
and c3.b5+c4.b4+c5.b3<=2
)
--列出符合要求的记录
select
combo
from allcombo
WHERE RANK=1

上文中只是代表个人见解,如有什么不当的地方还是希望大家能够及时指正出来。

【编辑推荐】

  1. SQL Server 2008内存性能监控
  2. SQL到NOSQL的思维转变
  3. SQL查询效率:100w数据查询只需要1秒钟

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...