楼主: 〇〇

[SQL] puzzleup 2016

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
61#
 楼主| 发表于 2016-8-11 08:12 | 只看该作者
〇〇 发表于 2016-8-11 08:02
内部一个顶点与其他6个方向组成棱,边上4个,角上3个
图中2*1长方体=(8*3+4*4)/2=20

图中实心的:还要算上6个面与5个方向组成棱
(8*3+12*7*4+6*6*6*5+6*6*6*6)/2

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
62#
发表于 2016-8-11 08:14 | 只看该作者
newkid 发表于 2016-8-11 07:22
靠,挖点挖错了,AND 写成了OR。内部确实有考虑的。

这个呢?

好像还不对,来个简单点的呢

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
63#
 楼主| 发表于 2016-8-11 08:30 | 只看该作者
本帖最后由 〇〇 于 2016-8-11 08:32 编辑
lugionline 发表于 2016-8-11 08:14
好像还不对,来个简单点的呢


=4*4*4实心-中心1点*6 -6个面*5

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
64#
发表于 2016-8-11 09:38 | 只看该作者
lugionline 发表于 2016-8-11 08:14
好像还不对,来个简单点的呢

老糊涂了,每边九点算成8点。
新答案:
  COUNT(*)
----------
      1296

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
65#
发表于 2016-8-11 09:43 | 只看该作者

使用道具 举报

回复
论坛徽章:
94
生肖徽章2007版:牛
日期:2012-08-02 22:43:00紫蛋头
日期:2012-12-08 09:43:38鲜花蛋
日期:2012-11-17 12:02:07鲜花蛋
日期:2013-02-05 21:53:34复活蛋
日期:2012-11-17 12:02:07SQL极客
日期:2013-12-09 14:13:35SQL数据库编程大师
日期:2013-12-06 13:59:43SQL大赛参与纪念
日期:2013-12-06 14:10:50ITPUB季度 技术新星
日期:2012-11-27 10:16:10最佳人气徽章
日期:2013-03-19 17:24:25
66#
发表于 2016-8-11 09:43 | 只看该作者
我擦,作的一手好弊啊,哈哈。
这题计算应该很容易

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
67#
发表于 2016-8-11 09:55 | 只看该作者

你这个看着头晕,做成VR版的动图?

写SQL也就几行,留给咖啡猫完成。

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
68#
 楼主| 发表于 2016-8-11 10:20 | 只看该作者
newkid 发表于 2016-8-11 09:38
老糊涂了,每边九点算成8点。
新答案:
  COUNT(*)

我也算错了

使用道具 举报

回复
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
69#
发表于 2016-8-11 12:59 | 只看该作者
newkid 发表于 2016-8-11 09:55
你这个看着头晕,做成VR版的动图?

写SQL也就几行,留给咖啡猫完成。

好吧,我的SQL 是这样的:

SQL> select (54*12 -12*12) + (54*12 -12*12) + (54*8 -12*12) from dual;
(54*12-12*12)+(54*12-12*12)+(5
------------------------------
                          1296


我的想法是:
1. 两个小方体是20条边
2. 四个小立方体等于2个两个小方体拼接成正方形即 20*2 - 7(有7条边公共)=33
3. 再把2个四个小立方体组成的正方形拼接成一个立方体 33*2 - 12 = 54
    即长度为2的立方体有54条边
4. 以长度为2的立方体为基本单位,题目的图的一个正面有12单位构成,有12个面相接,每个面相接少12条边
    所以总边数为 54*12 - 12*12
5. 最后的图形,有两个4的图构成,再加中间有长度为2的立方体为基本单位有8个,这8个有12个面相接,每个面相接少12条边,所以最后答案是:  (54*12 -12*12) + (54*12 -12*12) + (54*8 -12*12) =1296

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
70#
发表于 2016-8-11 21:35 | 只看该作者
solomon_007 发表于 2016-8-11 12:59
好吧,我的SQL 是这样的:

SQL> select (54*12 -12*12) + (54*12 -12*12) + (54*8 -12*12) from dual; ...

把公式写出来就给你章章。可以定义两个变量,比如大立方体边长为N, 挖掉之后的边框宽度为E, 答案是包含这两个变量的表达式。

我的方法是构造所有的端点集合,挖掉空洞里面的点,剩下的点两两配对,如果相邻就算:

var n number;
var e number;
exec :n:=8;
exec :e:=2;

WITH v AS (
SELECT ROWNUM id,x,y,z FROM
       (SELECT LEVEL x FROM DUAL CONNECT BY LEVEL<=:n+1)
      ,(SELECT LEVEL y FROM DUAL CONNECT BY LEVEL<=:n+1)
      ,(SELECT LEVEL z FROM DUAL CONNECT BY LEVEL<=:n+1)
WHERE NOT (x BETWEEN 2+:e AND :n-:e AND y BETWEEN 2+:e AND :n-:e  ---------- 如果三个坐标中的两个处于洞内就去掉
           OR x BETWEEN 2+:e AND :n-:e AND z BETWEEN 2+:e AND :n-:e
           OR y BETWEEN 2+:e AND :n-:e AND z BETWEEN 2+:e AND :n-:e
           )
)
SELECT COUNT(*)
   FROM v v1,v v2
  WHERE v1.id<v2.id  
        AND ((v1.x,v1.y,v1.z) IN ((v2.x+1,v2.y,v2.z),(v2.x-1,v2.y,v2.z))  ---- 两点是否相邻
             OR (v1.x,v1.y,v1.z) IN ((v2.x,v2.y+1,v2.z),(v2.x,v2.y-1,v2.z))
             OR (v1.x,v1.y,v1.z) IN ((v2.x,v2.y,v2.z+1),(v2.x,v2.y,v2.z-1))
            )
;

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表