楼主: 〇〇

Puzzleup 2013挑战赛即将开始

[复制链接]
论坛徽章:
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
161#
发表于 2013-10-24 01:14 | 只看该作者
呵呵,这帖子只在半夜被你顶起来,白天不在第一页有时就想不起来,明天再看了,刚弄完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
162#
发表于 2013-10-24 17:51 | 只看该作者
newkid 发表于 2013-10-16 23:45
#13
Balls And Boxes

算的话,那就是只可能是7210,6310,5410,5320,4321这5种情况,结果*4!=421920
你所说的十分简单的SQL,我怒想了一天,才意识到该用bitand,想到之后倒确实简单。。。。
bill@ORCL> with t as (
  2  select     sign(bitand((level-1), 1))+sign(bitand((level-1), 2))+sign(bitand((level-1), 4))+sign(bitand((level-1), 8))+
  3             sign(bitand((level-1), 16))+sign(bitand((level-1), 32))+sign(bitand((level-1), 64))+sign(bitand((level-1), 128))+
  4             sign(bitand((level-1), 256))+sign(bitand((level-1), 512)) s, rownum-1 n from dual connect by level<=1024)
  5  select     count(*)*24
  6  from       t t1, t t2, t t3, t t4
  7  where      bitand(t1.n, t2.n)=0
  8  and                bitand(t1.n, t3.n)=0
  9  and                bitand(t1.n, t4.n)=0
10  and                bitand(t2.n, t3.n)=0
11  and                bitand(t2.n, t4.n)=0
12  and                bitand(t3.n, t4.n)=0
13  and                t1.n+t2.n+t3.n+t4.n=1023
14  and                t1.s>t2.s
15  and                t2.s>t3.s
16  and                t3.s>t4.s;

COUNT(*)*24
-----------
     421920

Elapsed: 00:00:30.51

使用道具 举报

回复
论坛徽章:
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
163#
发表于 2013-10-24 22:39 | 只看该作者
你这写法太高端了,我的只是这样:

假设第一个盒子放n1个,共有C(10,n1)种方法;第二个从剩下的取n2个,共有C(10-n1,n2)种;第三个则是C(10-n1-n2,n3);剩下的全放第四个,第四个永远只有一种选择。所以总共是C(10,n1)*C(10-n1,n2)*C(10-n1-n2,n3)*1

WITH b AS (
SELECT LEVEL-1 n FROM DUAL CONNECT BY LEVEL<=11
)
,p(n,m,pr) AS (  -------- 排列p(n,m)
SELECT n,0,1 FROM b
UNION ALL
SELECT n
      ,m+1
      ,pr*(n-m)
  FROM p
WHERE m<n
)
,c AS ( ------- 组合:C(n,m)=p(n,m)/p(m,m)
SELECT p1.n,p1.m,p1.pr/p2.pr AS cb
  FROM p p1,p p2
WHERE p1.m=p2.m
       AND p1.m=p2.n
)
,bx AS (
SELECT b1.n n1,b2.n n2,b3.n n3,10-b1.n-b2.n-b3.n n4
  FROM b b1,b b2,b b3
WHERE b1.n+b2.n+b3.n<=10
       AND b1.n NOT IN (b2.n,b3.n,10-b1.n-b2.n-b3.n)
       AND b2.n NOT IN (b3.n,10-b1.n-b2.n-b3.n)
       AND b3.n <>10-b1.n-b2.n-b3.n
)
SELECT SUM(c1.cb*c2.cb*c3.cb)  ----C(10,n1)*C(10-n1,n2)*C(10-n1-n2,n3)
  FROM bx,c c1,c c2,c c3
WHERE c1.n=10 AND c1.m=n1
       AND c2.n=10-n1 AND c2.m=n2
       AND c3.n=10-n1-n2 AND c3.m=n3
       ;

SUM(C1.CB*C2.CB*C3.CB)--C(10,N1)*C(10-N1,N2)*C(10-N1-N2,N3)
-----------------------------------------------------------
                                                     421920

使用道具 举报

回复
论坛徽章:
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
164#
发表于 2013-10-25 18:42 | 只看该作者
newkid 发表于 2013-10-24 00:50
牛蛙怎么没做上周作业?

#14 Two Pawns

bill@ORCL> with t as (
  2  select case when rownum<=8 then 0 when rownum<=16 then 1 else 2 end s, rownum n from dual connect by rownum<=32)
  3  select     count(case when regexp_count(sys_connect_by_path(s, ','), '0')>=2 then 1 else null end)||'/'||count(*)
  4  from       t
  5  where      level=5
  6  connect by prior n<n and level<=5
  7  start with s in (0, 1);

COUNT(CASEWHENREGEXP_COUNT(SYS_CONNECT_BY_PATH(S,','),'0')>=2THEN1ELSENULLEND)||'/'||COUNT(*)
----------------------------------------------------------------------------------------------------------------------
73864/197008

已用时间:  00: 00: 01.49
笔算也是这个结果

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
114
SQL数据库编程大师
日期:2013-12-06 13:59:43萤石
日期:2013-12-06 15:50:21ITPUB元老
日期:2007-09-25 17:05:532011数据库大会纪念章
日期:2015-04-23 10:33:192010数据库技术大会纪念徽章
日期:2015-04-23 10:33:19喜羊羊
日期:2015-03-24 13:02:282015年新春福章
日期:2015-03-06 11:57:31喜羊羊
日期:2015-03-04 14:49:39马上有房
日期:2015-01-22 17:30:45马上加薪
日期:2014-12-25 08:48:51
165#
发表于 2013-10-25 21:12 | 只看该作者
又更新了啊,有空看看,
sql大赛发现自己有BUG

使用道具 举报

回复
论坛徽章:
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
166#
发表于 2013-10-25 21:30 | 只看该作者
piliskys 发表于 2013-10-25 21:12
又更新了啊,有空看看,
sql大赛发现自己有BUG

是吗,那我朝一等奖又近了点儿

使用道具 举报

回复
论坛徽章:
10000
绿钻
日期:2016-02-22 15:43:08绿钻
日期:2016-03-01 18:19:01绿钻
日期:2016-02-22 15:43:08绿钻
日期:2016-03-01 18:19:01绿钻
日期:2015-12-16 18:42:35绿钻
日期:2015-12-11 00:18:01绿钻
日期:2015-09-10 13:05:08绿钻
日期:2015-12-11 00:18:01绿钻
日期:2015-09-10 13:05:08绿钻
日期:2015-09-10 13:05:08
167#
发表于 2013-10-25 21:47 | 只看该作者
收藏先,慢慢的一题一题学习下来
感觉做这些谜题还是要有很好的数学底子啊

使用道具 举报

回复
论坛徽章:
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
168#
发表于 2013-10-25 23:39 | 只看该作者
udfrog 发表于 2013-10-25 18:42
bill@ORCL> with t as (
  2  select case when rownum

跟你一样,但是用了WHERE没用START WITH,还是你的好。

使用道具 举报

回复
论坛徽章:
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
169#
发表于 2013-10-31 02:24 | 只看该作者
#15 Digits

A number has different digits, and the digits of the sum of each neighboring two digits are not used in this number.

What is the largest number satisfying these conditions?

Example:
7692
7+6=13, 6+9=15, 9+2=11 (The digits 1, 3 and 5 are not used.)      

一个数的每位各不相同,每相邻的两位数之和的数字没有出现在这个数中。满足这些条件的最大的数是多少?

例如:
7692
7+6=13, 6+9=15, 9+2=11 (数字 1, 3 和 5 未被使用)      

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
170#
 楼主| 发表于 2013-10-31 07:25 | 只看该作者
newkid 发表于 2013-10-31 02:24
#15 Digits

A number has different digits, and the digits of the sum of each neighboring two digit ...

相邻的两位数之和不一定是1位数,2位数怎么算

使用道具 举报

回复

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

本版积分规则 发表回复

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