楼主: newkid

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

[复制链接]
论坛徽章:
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
241#
发表于 2012-10-27 00:59 | 只看该作者
newkid 发表于 2012-10-26 02:48
花花的肉果然强大:

官方的答案是多少?也跟我们的推测一样?

使用道具 举报

回复
论坛徽章:
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
242#
 楼主| 发表于 2012-10-27 01:55 | 只看该作者
lastwinner 发表于 2012-10-27 00:59
官方的答案是多少?也跟我们的推测一样?

没有答案,这个人从来不放答案。

使用道具 举报

回复
论坛徽章:
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
243#
发表于 2012-10-27 01:56 | 只看该作者
lastwinner 发表于 2012-10-27 00:59
官方的答案是多少?也跟我们的推测一样?

应该是一样的,nk这个质数的算法拿来借鉴一下
  1. WITH t0 AS (
  2.     SELECT 2*ROWNUM+1 rn FROM DUAL CONNECT BY ROWNUM <= (100000)/2-1-1
  3.     ),
  4. t as(SELECT rn from t0
  5.       where mod(rn,3)<>0
  6.             and mod(rn,5)<>0
  7.             and mod(rn,7)<>0
  8.     )
  9. ,p AS (
  10. SELECT TO_CHAR(rn) n,LENGTH(rn) len
  11.    FROM (SELECT rn from t
  12.          MINUS
  13.          SELECT t1.rn * t2.rn
  14.            FROM t t1, t t2
  15.          WHERE t1.rn <= t2.rn
  16.                AND t1.rn BETWEEN 11 AND SQRT(100000)
  17.                AND t1.rn * t2.rn <100000
  18.        )
  19. WHERE rn>10
  20. ),
  21. tmp (n, digit) as (
  22. select        n, 2 digit
  23. from        p
  24. where        len=2
  25. union all
  26. select        a.n||substr(b.n, -1) n, a.digit+1 digit
  27. from        tmp a, tmp b, p
  28. where        a.digit=b.digit
  29. and        substr(a.n, 2)=substr(b.n, 1, b.digit-1)
  30. and        a.n||substr(b.n, -1)=p.n)
  31. select max(to_number(n)) from tmp;
复制代码

使用道具 举报

回复
论坛徽章:
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
244#
 楼主| 发表于 2012-10-27 01:59 | 只看该作者
udfrog 发表于 2012-10-27 01:56
应该是一样的,nk这个质数的算法拿来借鉴一下

我原先想这么干,文档里有限制对递归表的引用不能多于一次,你用了tmp自己和自己连接,竟然不报错!

使用道具 举报

回复
论坛徽章:
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
245#
发表于 2012-10-27 18:08 | 只看该作者
newkid 发表于 2012-10-27 01:59
我原先想这么干,文档里有限制对递归表的引用不能多于一次,你用了tmp自己和自己连接,竟然不报错!

说不定下个版本就报错了,好像connect by root???10可以,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
246#
发表于 2012-10-28 00:52 | 只看该作者
newkid 发表于 2012-10-27 01:55
没有答案,这个人从来不放答案。

那我们这个就是最终标准答案了
起码这样的问题是比较好验证正确与否的

使用道具 举报

回复
论坛徽章:
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
247#
发表于 2012-10-28 00:55 | 只看该作者
udfrog 发表于 2012-10-27 01:56
应该是一样的,nk这个质数的算法拿来借鉴一下

你俩都偷懒了
WITH t0 AS (
    SELECT 10*ROWNUM+1 rn FROM DUAL CONNECT BY ROWNUM <= (100000)/10-1-1
    union all
    SELECT 10*ROWNUM+3 rn FROM DUAL CONNECT BY ROWNUM <= (100000)/10-1-1
    union all
    SELECT 10*ROWNUM+7 rn FROM DUAL CONNECT BY ROWNUM <= (100000)/10-1-1
    union all
    SELECT 10*ROWNUM+9 rn FROM DUAL CONNECT BY ROWNUM <= (100000)/10-1-1
    ),
t as(SELECT rn from t0
      where mod(rn,3)<>0
            and mod(rn,7)<>0
    )

尾数为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
248#
 楼主| 发表于 2012-10-28 02:41 | 只看该作者
lastwinner 发表于 2012-10-28 00:55
你俩都偷懒了
WITH t0 AS (
    SELECT 10*ROWNUM+1 rn FROM DUAL CONNECT BY ROWNUM

那是从以前一个现成的SQL挪用的,要不你再努力一把,看看用SQL能否达到筛法的速度?

使用道具 举报

回复
论坛徽章:
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
249#
发表于 2012-10-29 00:31 | 只看该作者
newkid 发表于 2012-10-28 02:41
那是从以前一个现成的SQL挪用的,要不你再努力一把,看看用SQL能否达到筛法的速度?

算法很重要,目前只能想到递归的做法,不过用sql还是很困难,要高效得pl/sql来处理

使用道具 举报

回复
论坛徽章:
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
250#
 楼主| 发表于 2012-10-31 23:22 | 只看该作者
#15 Banknotes

In a country, there are four types of banknotes: 5, 10, 20 and 25 unit values. Each banknote has a serial number with more than four digits. A banknote is chosen randomly. What is the probability that the sum of the four last digits of the serial number is bigger than the banknote unit value?

Note:Four banknote types, and all the serial numbers (...0000 - ...9999) can be chosen with equal probability.

在某个国家总共有四种钞票, 面额分别为5,10,20和25。每张钞票有一个多于四位的序列号。随机选择一张钞票,序列号最后四位之和大于钞票面额的概率是多少?

注:四种钞票和所有序列号(...0000 - ...9999)选中的概率是相同的。

这不是很简单吗?

使用道具 举报

回复

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

本版积分规则 发表回复

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