楼主: newkid

[精华] puzzleup2012谜题,请用SQL或PLSQL解答

[复制链接]
论坛徽章:
1
ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:48
171#
发表于 2012-10-4 10:25 | 只看该作者
你翻译就明白了。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
172#
发表于 2012-10-5 01:19 | 只看该作者
newkid 发表于 2012-10-3 23:13
骰子游戏

你和朋友正在玩一个投掷两个标准骰子的游戏。如果连续两次出现7你就获胜;如果连续三次出现递 ...

没有区分那就说明作者的意思是投掷骰子完全可以由第三人来进行,而投掷骰子的最大次数并不限制,直到出现两次连续的7或者连续三次都增长为止。出现前者是你赢,后者是你朋友赢。

比如 3/5/4/11/10/7/7是你赢,  3/5/4/11/10/7/9/11是你朋友赢

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
173#
发表于 2012-10-5 01:25 | 只看该作者
〇〇 发表于 2012-9-26 22:54
160/(3.142*0.25)=203?

这根本不可能
我能想到的是交错排列,这样有可能可以多排列一两行,代价是每两行要比原先少排列一个圆,最终就看多排列出的圆减去少排列的圆是不是整数

另外需要考察分别从长边和短边交错排的结果,这很可能是不一样的的结果

最重要的是需要证明交错排列是可以放置最多圆的。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
174#
发表于 2012-10-5 02:01 | 只看该作者
本帖最后由 lastwinner 于 2012-10-5 03:38 编辑
lastwinner 发表于 2012-10-5 01:25
这根本不可能
我能想到的是交错排列,这样有可能可以多排列一两行,代价是每两行要比原先少排列一个圆, ...

交错排列画个简单的示意图如下:
● ● ● ● ●
● ● ● ●
如果交错排列,那么两行所需占据的高度为1/2+sqrt(3)/2+1/2=1.866
10*16的方格,按宽为16长为10算
10/1.866=5.35,剩余的0.35*1.866=0.67<1,不足以放下一个圆,所以这样放置总共可以放5组
每组是16+15=31,5组就是155个,比最容易想到的160个要少

换成宽为10长为16算
16/1.866=8.57,0.57*1.866=1.072,超过1,还可以再放下一组圆中的第一行
如此每组的圆的个数就是10+9=19个,总数就是19*8+10=162个
————————————————————————————————————————
当然,上面只是粗算,应该注意到,由于交错排列的存在,所以在第二组圆放进去的时候,实际上占用的高度可以比1.866要小。

使用道具 举报

回复
论坛徽章:
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
175#
 楼主| 发表于 2012-10-5 02:03 | 只看该作者
lastwinner 发表于 2012-10-5 01:19
没有区分那就说明作者的意思是投掷骰子完全可以由第三人来进行,而投掷骰子的最大次数并不限制,直到出现 ...

确实是这样,并不是原先理解的各扔各的,而是有第三人。原作者已经补充了:

Examples:If the outcomes are 10,4,6,6,7,7 you will win. If the outcomes are 7,3,7,9 your friend will win.

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
176#
发表于 2012-10-5 03:42 | 只看该作者
lastwinner 发表于 2012-10-5 02:01
交错排列画个简单的示意图如下:
● ● ● ● ●
● ● ● ●

更正了31*5=165的错误
接着说“所以在第二组圆放进去的时候,实际上占用的高度可以比1.866要小。”
可节约下来的高度为1/2-sqrt(3)/4=0.067,所以在放置了第一组圆后,接下来每一组只需要占用1.799的高度,而在高度不够的时候,如果只放下一组圆的第一行,那么需要的最小高度为1-(1/2-sqrt(3)/4)=0.933

所以,按宽为16长为10算
(10-1.866)/1.8=4.52,剩余的0.52*1.8=0.936,还足以放下一组圆的第一行,所以这样放置总共可以放5组还多一行
每组是16+15=31,5组就是155个,再加上多出的一行,16个圆,总共171个圆

换成宽为10长为16算
(16-1.866)/1.8=7.85,0.8522*1.8=1.534,还可以再放下一组圆中的第一行
如此每组的圆的个数就是10+9=19个,总数就是19*8+10=162个

综上,最多是171个圆。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
177#
发表于 2012-10-5 03:52 | 只看该作者
newkid 发表于 2012-10-5 02:03
确实是这样,并不是原先理解的各扔各的,而是有第三人。原作者已经补充了:

Examples:If the outcomes ...

看来我的理解能力还是不错的
实际上这个问题当成两个独立的概率事件来计算其分别的值就行了,以ABC来表示3次投掷的值,特殊的一点只在于两个连续的7的概率计算要考虑AB均为7的概率和A不为7而BC为7的概率,二者之和与连续三个递增的数的概率去比,就能得出谁是更可能获胜的人了

使用道具 举报

回复
论坛徽章:
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
178#
 楼主| 发表于 2012-10-5 04:57 | 只看该作者
lastwinner 发表于 2012-10-5 03:42
更正了31*5=165的错误
接着说“所以在第二组圆放进去的时候,实际上占用的高度可以比1.866要小。”
可节 ...

如果第一行不那么密,比如15个会怎么样?
有没有其他的不规则排列?

使用道具 举报

回复
论坛徽章:
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
179#
 楼主| 发表于 2012-10-5 05:03 | 只看该作者
lastwinner 发表于 2012-10-5 03:52
看来我的理解能力还是不错的
实际上这个问题当成两个独立的概率事件来计算其分别的值就行了,以ABC来 ...

ABCD可以拆成独立的两组:ABC和BCD吗?如果可以则你的思路成立。

使用道具 举报

回复
论坛徽章:
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
180#
 楼主| 发表于 2012-10-5 05:12 | 只看该作者
野花的答案:

WITH d AS (
SELECT N1+N2 n
FROM  (SELECT LEVEL N1 FROM DUAL CONNECT BY LEVEL<=6)
     ,(SELECT LEVEL N2 FROM DUAL CONNECT BY LEVEL<=6)
)
SELECT COUNT(CASE WHEN d1.n=7 AND d2.n=7 OR d2.n=7 AND d3.n=7 THEN 1 END) CNT1
      ,COUNT(CASE WHEN d1.n<d2.n AND d2.n<d3.n THEN 1 END) CNT2
  FROM d d1,d d2,d d3;

     CNT1       CNT2
--------- ----------
     2376       5370

看起来没什么错。

使用道具 举报

回复

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

本版积分规则 发表回复

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