楼主: newkid

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

[复制链接]
论坛徽章:
93
生肖徽章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
211#
发表于 2012-10-15 17:58 | 只看该作者
对于放圆圈的问题,不应该分别试验10作为长还是作为宽,而是找出交错排列最接近整数的层数来作为边界。
而实际上不论10作为长还是宽,都能找到放置172个圆圈的方法。
  1. trainer@ORCL> select    (1+(rownum-1)*sqrt(3)/2)-floor(1+(rownum-1)*sqrt(3)/2) rest,
  2.   2     1+(rownum-1)*sqrt(3)/2 side_a,
  3.   3     rownum side_b
  4.   4  from       dual
  5.   5  connect by rownum<=20
  6.   6  order by 1 desc;

  7.       REST     SIDE_A     SIDE_B
  8. ---------- ---------- ----------
  9. .990381057 13.9903811         16
  10. .92820323 7.92820323          9
  11. .866025404  1.8660254          2
  12. .856406461 14.8564065         17
  13. .794228634 8.79422863         10
  14. .732050808 2.73205081          3
  15. .722431864 15.7224319         18
  16. .660254038 9.66025404         11
  17. .598076211 3.59807621          4
  18. .588457268 16.5884573         19
  19. .526279442 10.5262794         12
  20. .464101615 4.46410162          5
  21. .454482672 17.4544827         20
  22. .392304845 11.3923048         13
  23. .330127019 5.33012702          6
  24. .258330249 12.2583302         14
  25. .196152423 6.19615242          7
  26. .124355653 13.1243557         15
  27. .062177826 7.06217783          8
  28.          0          1          1
复制代码
实际上,这个sql显示,左右错位时以16层作为分隔点,似乎会更节省空间,虽然此题下依然只能放置172个,不过这样的寻找方式可以确保我们不会漏掉更多的可能。

使用道具 举报

回复
论坛徽章:
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
212#
发表于 2012-10-16 00:47 | 只看该作者
udfrog 发表于 2012-10-15 17:58
对于放圆圈的问题,不应该分别试验10作为长还是作为宽,而是找出交错排列最接近整数的层数来作为边界。
而 ...

目前这些都不是关键,关键是如何证明交错放置可以放下最多的圆
如果此题缩减到2*10,那么你的sql会得出什么结果呢?

使用道具 举报

回复
论坛徽章:
93
生肖徽章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
213#
发表于 2012-10-16 11:56 | 只看该作者
投色子可以模拟n次比赛双7的获胜次数来粗略定位最终的分数概率,如果没错的话可以用来检验究竟我们计算的概率是否正确。
  1. declare
  2. dice1                int:=0;
  3. dice2                int:=0;
  4. dice3                int:=0;
  5. d7_win                int:=0;
  6. total_games        int:=100000;
  7. begin
  8.         for i in 1..total_games loop
  9.                 loop
  10.                 dice1:=dice2;
  11.                 dice2:=dice3;
  12.                 dice3:=floor(dbms_random.value(1, 7))+floor(dbms_random.value(1, 7));
  13.                 if dice2=7 and dice3=7 then
  14.                         dice1:=0;
  15.                         dice2:=0;
  16.                         dice3:=0;
  17.                         d7_win:=d7_win+1;
  18.                         exit;
  19.                 end if;
  20.                 if dice1>0 and dice1<dice2 and dice2<dice3 then
  21.                         dice1:=0;
  22.                         dice2:=0;
  23.                         dice3:=0;
  24.                         exit;
  25.                 end if;
  26.                 end loop;
  27.         end loop;
  28.         dbms_output.put_line(d7_win);
  29. end;
  30. /
复制代码

使用道具 举报

回复
论坛徽章:
93
生肖徽章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
214#
发表于 2012-10-16 12:01 | 只看该作者
从代码的结果来看,196楼216/1111的这个结果极像是真的,大虎。。。

使用道具 举报

回复
论坛徽章:
93
生肖徽章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
215#
发表于 2012-10-16 14:27 | 只看该作者
概率相加的方法就不要想了,因为足够长的队列,可以认为一定会出现双7或者递增,也就是说,概率相加的思路,一定是左边很复杂的计算,即使用某种方法计算出了结果,等式右边一定是1.
觉得色子这题很像某种分布+微积分来解决。这个分布指的是双7或者递增时的队列长度,不能简单的求长度平均数。最后用这个分布来比。

使用道具 举报

回复
论坛徽章:
0
216#
发表于 2012-10-16 14:35 | 只看该作者
???怎么回事

使用道具 举报

回复
论坛徽章:
93
生肖徽章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
217#
发表于 2012-10-17 11:31 | 只看该作者
12题L型
实际上就是在棋盘中可以放置x个边长差为奇数的矩形,x*4即为L型的个数;而只考虑竖放或者横放y个这样的矩形,则x=y*2;
可以算出y=k^3*(k-1), k=n/2,
所以n=8时,L型个数就是8*y=1536

使用道具 举报

回复
论坛徽章:
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
218#
 楼主| 发表于 2012-10-17 23:45 | 只看该作者
#13 Double Factored

Let's call a number "double factored" if at least one of its prime factors repeats itself when factorised. What is the smallest positive integer that itself and its four neighbors (2 before, 1 before, the number itself, 1 after, 2 after) are double factored?

If the problem was asked for the number and its two neighbors (1 before, the number itself, 1 after) then the answer would be 49. (48=2x2x2x2x3 , 49=7x7, 50=2x5x5).

如果一个数,它的某个质数因子在分解的时候重复出现,则称之为“重因子”数。最小的连同四个相邻数都是“重因子”数的整数是多少?(四个相邻数只的是:前两个数,该数本身,后两个数)

如果问题问的是两个相邻数(前一个,该数本身,后一个)那么答案为 49 (48=2x2x2x2x3 , 49=7x7, 50=2x5x5)

这个用筛法程序改一下即可,不知道多少范围内能找出来。

使用道具 举报

回复
论坛徽章:
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
219#
 楼主| 发表于 2012-10-17 23:46 | 只看该作者
udfrog 发表于 2012-10-17 11:31
12题L型
实际上就是在棋盘中可以放置x个边长差为奇数的矩形,x*4即为L型的个数;而只考虑竖放或者横放y个这 ...

把公式推导过程写出来我就给你发章。

使用道具 举报

回复
论坛徽章:
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
220#
 楼主| 发表于 2012-10-18 01:29 | 只看该作者
13题果然在很小的范围内,用筛法一下子就求出来了。

使用道具 举报

回复

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

本版积分规则 发表回复

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