楼主: 〇〇

Puzzleup 2013挑战赛即将开始

[复制链接]
论坛徽章:
118
2015年新春福章
日期:2015-03-06 11:58:18生肖徽章:猪
日期:2013-12-06 14:15:45生肖徽章:狗
日期:2013-12-06 14:15:45生肖徽章:鸡
日期:2013-12-06 14:15:45生肖徽章:猴
日期:2013-12-06 14:15:45生肖徽章:羊
日期:2013-12-06 14:15:45生肖徽章:马
日期:2013-12-06 14:15:45生肖徽章:蛇
日期:2013-12-06 14:15:45生肖徽章:龙
日期:2013-12-06 14:15:45生肖徽章:兔
日期:2013-12-06 14:15:45
71#
发表于 2013-8-17 22:15 | 只看该作者
我就是觉得1个个拼很慢,就4个来的。发现4个变8个就是 test2就特慢了,直接无法出结果,只能拆开算了。其实8个符合条件的就一千多个

使用道具 举报

回复
论坛徽章:
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
72#
发表于 2013-8-18 16:06 | 只看该作者
〇〇 发表于 2013-8-16 16:35
利用instr的第4个参数,终于改对了
set num 20
SQL> with t as (select level-1 l from dual connect b ...

简单高效,非常漂亮的写法,good job!

使用道具 举报

回复
论坛徽章:
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
73#
发表于 2013-8-18 16:11 | 只看该作者
〇〇 发表于 2013-8-16 16:35
利用instr的第4个参数,终于改对了
set num 20
SQL> with t as (select level-1 l from dual connect b ...

感觉有一处不严谨,t2没有限制字符出现不超过两次。虽然有很多偶然的因素导致不会出现8881开头的符合条件的数字。不知道你是否在写代码的时候有综合考虑到所以没有加上

使用道具 举报

回复
论坛徽章:
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
74#
 楼主| 发表于 2013-8-19 18:27 | 只看该作者
udfrog 发表于 2013-8-18 16:11
感觉有一处不严谨,t2没有限制字符出现不超过两次。虽然有很多偶然的因素导致不会出现8881开头的符合条件 ...

想过,但是太傻
and instr(a.l||b.l||c.l||d.l,a.l,1,3)=0
and instr(a.l||b.l||c.l||d.l,b.l,1,3)=0
and instr(a.l||b.l||c.l||d.l,c.l,1,3)=0
and instr(a.l||b.l||c.l||d.l,d.l,1,3)=0
and a.l||b.l not like '0%'
因为后面接上去的都判断了instr(str,c,1,3)所以如果最长数超过4,自动就滤掉了

使用道具 举报

回复
论坛徽章:
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
75#
发表于 2013-8-19 21:18 | 只看该作者
〇〇 发表于 2013-8-19 18:27
想过,但是太傻
and instr(a.l||b.l||c.l||d.l,a.l,1,3)=0
and instr(a.l||b.l||c.l||d.l,b.l,1,3)=0

"所以如果最长数超过4,自动就滤掉了"什么意思?

使用道具 举报

回复
论坛徽章:
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
76#
发表于 2013-8-19 21:34 | 只看该作者
lugionline 发表于 2013-8-17 08:54
大家的做法肯定都差不多

with

用两位二进制来充当计数器的方法很新颖!我试过十进制,但十进制没有位操作,要用其他办法实现。

改成ORACLE语法:
with
d (n, m, c) as
(
         select 0, power(4, 0) * 3, power(4, 0) * 1 FROM DUAL union all
         select n + 1, power(4, n + 1) * 3, power(4, n + 1) * 1 from d where n < 9
),
s (x, c, p1, p2, p3, p4, l) as
(
         select cast(d.n as varchar2(20)), d.c, 0, 0, 0, d.n, 1 from d where n > 0 union all
         select s.x || d.n , s.c + d.c, s.p2, s.p3, s.p4, d.n, s.l + 1 from s, d
         where ( BITAND(d.m, (s.c + d.c))) < d.m
                 and (s.l + 1 < 4 or (s.p2 + s.p3 + s.p4 + d.n) in (select n*n from d))
)
select x from
(
         select x, rank() over (order by l desc) r from s
) s where r = 1

我刚刚发现图书章不可转让,那就有劳你把书名和联系办法告诉童馨,或者告诉我也行。

使用道具 举报

回复
论坛徽章:
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
77#
发表于 2013-8-19 21:42 | 只看该作者
〇〇 发表于 2013-8-19 18:27
想过,但是太傻
and instr(a.l||b.l||c.l||d.l,a.l,1,3)=0
and instr(a.l||b.l||c.l||d.l,b.l,1,3)=0

把t2也写到递归里去就行了,参见68楼写法。

使用道具 举报

回复
论坛徽章:
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
78#
 楼主| 发表于 2013-8-19 22:02 | 只看该作者
newkid 发表于 2013-8-19 21:42
把t2也写到递归里去就行了,参见68楼写法。

因为题目已经出来超过4位数的,我原来以为8881会自动隔离,但如果后面凑上去的没有8就难讲了

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
79#
发表于 2013-8-20 06:34 | 只看该作者
newkid 发表于 2013-8-19 21:34
用两位二进制来充当计数器的方法很新颖!我试过十进制,但十进制没有位操作,要用其他办法实现。

改成 ...

章就不要了,麻烦,我对技术书籍不感冒,看教科书和用户手册就够了

使用道具 举报

回复
论坛徽章:
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
80#
 楼主| 发表于 2013-8-20 07:00 | 只看该作者
lugionline 发表于 2013-8-20 06:34
章就不要了,麻烦,我对技术书籍不感冒,看教科书和用户手册就够了

我在看一本《电子电器工程师必知必会》,很厉害的样子,它也不是教科书

使用道具 举报

回复

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

本版积分规则 发表回复

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