楼主: tree_new_bee

[精华] 趣题, 第8道来了。

[复制链接]
求职 : 数据库开发
论坛徽章:
10
茶鸡蛋
日期:2012-04-19 16:08:35美羊羊
日期:2015-03-24 15:03:142015年新春福章
日期:2015-03-06 11:58:392015年新春福章
日期:2015-03-04 14:53:16马上有对象
日期:2014-08-15 13:23:54优秀写手
日期:2014-08-15 06:00:13马上加薪
日期:2014-08-14 22:48:12马上有房
日期:2014-09-04 07:54:53ITPUB 11周年纪念徽章
日期:2012-10-09 18:14:482015年新春福章
日期:2015-03-30 14:49:43
51#
发表于 2012-5-9 17:40 | 只看该作者
21212323434321
14位 答案?

使用道具 举报

回复
论坛徽章:
10
CTO参与奖
日期:2009-02-20 09:44:20ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30迷宫蛋
日期:2012-05-07 10:55:58茶鸡蛋
日期:2012-04-19 16:08:262012新春纪念徽章
日期:2012-01-04 11:54:462011新春纪念徽章
日期:2011-01-04 10:24:02数据库板块每日发贴之星
日期:2010-12-19 01:01:02数据库板块每日发贴之星
日期:2010-12-13 01:01:012009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2014-02-08 06:00:12
52#
 楼主| 发表于 2012-5-9 19:02 | 只看该作者
jixch 发表于 2012-5-9 17:24
(2)每连续的4位称作一个“节”(例如12343,有两个“节”:1234,2343),任意两节不同。

应该算4节吧 ...

没错

使用道具 举报

回复
论坛徽章:
10
CTO参与奖
日期:2009-02-20 09:44:20ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30迷宫蛋
日期:2012-05-07 10:55:58茶鸡蛋
日期:2012-04-19 16:08:262012新春纪念徽章
日期:2012-01-04 11:54:462011新春纪念徽章
日期:2011-01-04 10:24:02数据库板块每日发贴之星
日期:2010-12-19 01:01:02数据库板块每日发贴之星
日期:2010-12-13 01:01:012009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2014-02-08 06:00:12
53#
 楼主| 发表于 2012-5-9 19:02 | 只看该作者
jixch 发表于 2012-5-9 17:40
21212323434321
14位 答案?

不够长。

使用道具 举报

回复
论坛徽章:
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
54#
发表于 2012-5-9 21:19 | 只看该作者
jixch 发表于 2012-5-9 17:40
21212323434321
14位 答案?

肉眼明显可以看出最后还可以接个2

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期: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
55#
发表于 2012-5-9 21:36 | 只看该作者
WITH t AS (
SELECT LEVEL n FROM DUAL CONNECT BY LEVEL<=4
)
,t2 AS (
SELECT t1.n||t2.n||t3.n||t4.n s
  FROM t t1,t t2,t t3,t t4
WHERE t1.n IN (t2.n+1,t2.n-1)
       AND t2.n IN (t3.n+1,t3.n-1)
       AND t3.n IN (t4.n+1,t4.n-1)
)
SELECT * FROM (
SELECT LEVEL
      ,SYS_CONNECT_BY_PATH(s,'\') s
      ,RANK() OVER(ORDER BY LEVEL DESC) rnk
  FROM t2
CONNECT BY NOCYCLE SUBSTR(s,1,3)=SUBSTR(PRIOR s,2,3)
)
WHERE rnk=1;

先用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
56#
发表于 2012-5-9 21:38 | 只看该作者
本帖最后由 lastwinner 于 2012-5-9 21:40 编辑

一节里的数字还能重复啊……
满足条件1,那必然满足相邻两位不同
只满足“相邻两位不同”这个条件的4位数字有4*3*3*3=244个
满足条件1的4位数字,应该有…………还是拿sql来算吧

于是我写了一个sql
with t as (SELECT LEVEL n FROM DUAL CONNECT BY LEVEL<=4)
select t1.n||t2.n||t3.n||t4.n from t t1,t t2, t t3, t t4
where abs(t1.n-t2.n)=1 and abs(t2.n-t3.n)=1 and abs(t3.n-t4.n)=1
/

T1.N||T2.N||T3.N||T4.N
1212
1232
1234
2121
2123
2321
2323
2343
3212
3232
3234
3432
3434
4321
4323
4343

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期: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
57#
发表于 2012-5-9 21:42 | 只看该作者
lastwinner 发表于 2012-5-9 13:13
然后我们从可用候选数最少的数开始探索
18        7,31
32        4,17

如果相邻节点只有一个,则可以判断为起点或终点;你这种两个数的可不一定,挑软柿子捏没门。

使用道具 举报

回复
论坛徽章:
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
58#
发表于 2012-5-9 21:54 | 只看该作者
newkid 发表于 2012-5-9 21:42
如果相邻节点只有一个,则可以判断为起点或终点;你这种两个数的可不一定,挑软柿子捏没门。

是啊,所以我说虽然是从他开始,但他不一定是两端

使用道具 举报

回复
论坛徽章:
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
59#
发表于 2012-5-9 22:00 | 只看该作者
newkid 发表于 2012-5-9 21:36
WITH t AS (
SELECT LEVEL n FROM DUAL CONNECT BY LEVEL

人肉思路和问题2差不多

先看前三个数字
with t as (SELECT LEVEL n FROM DUAL CONNECT BY LEVEL<=4)
,s as (select t1.n||t2.n||t3.n||t4.n p from t t1,t t2, t t3, t t4
where abs(t1.n-t2.n)=1 and abs(t2.n-t3.n)=1 and abs(t3.n-t4.n)=1)
select substr(p,1,3), count(*) from s group by substr(p,1,3)
/


SUBSTR(P,1,3)        COUNT(*)
121        1
123        2
212        2
232        2
234        1
321        1
323        2
343        2
432        2
434        1

再看后三个数字
with t as (SELECT LEVEL n FROM DUAL CONNECT BY LEVEL<=4)
,s as (select t1.n||t2.n||t3.n||t4.n p from t t1,t t2, t t3, t t4
where abs(t1.n-t2.n)=1 and abs(t2.n-t3.n)=1 and abs(t3.n-t4.n)=1)
--select substr(p,1,3), count(*) from s group by substr(p,1,3)
select substr(p,2), count(*) from s group by substr(p,2)

SUBSTR(P,2)        COUNT(*)
121        1
123        1
212        2
232        2
234        2
321        2
323        2
343        2
432        1
434        1


然后想想怎么合并

使用道具 举报

回复
论坛徽章:
10
CTO参与奖
日期:2009-02-20 09:44:20ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30迷宫蛋
日期:2012-05-07 10:55:58茶鸡蛋
日期:2012-04-19 16:08:262012新春纪念徽章
日期:2012-01-04 11:54:462011新春纪念徽章
日期:2011-01-04 10:24:02数据库板块每日发贴之星
日期:2010-12-19 01:01:02数据库板块每日发贴之星
日期:2010-12-13 01:01:012009日食纪念
日期:2009-07-22 09:30:00优秀写手
日期:2014-02-08 06:00:12
60#
 楼主| 发表于 2012-5-9 22:14 | 只看该作者
newkid 发表于 2012-5-9 21:42
如果相邻节点只有一个,则可以判断为起点或终点;你这种两个数的可不一定,挑软柿子捏没门。

野花非要整个42做例子,给自己找麻烦。
用23-30的话,都能找到软柿子捏的:  这个范围内,18一直是那个软柿子。

使用道具 举报

回复

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

本版积分规则 发表回复

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