关注我们获得更多精彩内容!

高考期间看到一个朋友在朋友圈里面贴了个图,上面是2018年刑侦科推理试题,看了一下题目,这些题目都是彼此依赖,很难找到一个题目作为入手点可以进一步分析,因此可能需要用纸笔配合大量的假设和试错才能继续完成。

原题如下,大家可以先烧烧脑,再来看解决方案:

这种问题其实是SQL擅长的领域,于是一时手痒,写了一个SQL语句:

SQL> WITH T AS

2  (SELECT ASCII('A') R FROM DUAL

3  UNION ALL

4  SELECT ASCII('B') FROM DUAL

5  UNION ALL

6  SELECT ASCII('C') FROM DUAL

7  UNION ALL

8  SELECT ASCII('D') FROM DUAL),

9  RESULT AS

10  (SELECT T1.R R1, T2.R R2, T3.R R3, T4.R R4, T5.R R5, T6.R R6, T7.R R7, T8.R R8, T9.R R9, T10.R R10,

11     DECODE(T1.R, ASCII('A'), 1, 0) + DECODE(T2.R, ASCII('A'), 1, 0) + DECODE(T3.R, ASCII('A'), 1, 0) + DECODE(T4.R, ASCII('A'), 1, 0)

12             + DECODE(T5.R, ASCII('A'), 1, 0) + DECODE(T6.R, ASCII('A'), 1, 0) + DECODE(T7.R, ASCII('A'), 1, 0)

13             + DECODE(T8.R, ASCII('A'), 1, 0) + DECODE(T9.R, ASCII('A'), 1, 0) + DECODE(T10.R, ASCII('A'), 1, 0) A,

14     DECODE(T1.R, ASCII('B'), 1, 0) + DECODE(T2.R, ASCII('B'), 1, 0) + DECODE(T3.R, ASCII('B'), 1, 0) + DECODE(T4.R, ASCII('B'), 1, 0)

15             + DECODE(T5.R, ASCII('B'), 1, 0) + DECODE(T6.R, ASCII('B'), 1, 0) + DECODE(T7.R, ASCII('B'), 1, 0)

16             + DECODE(T8.R, ASCII('B'), 1, 0) + DECODE(T9.R, ASCII('B'), 1, 0) + DECODE(T10.R, ASCII('B'), 1, 0) B,

17     DECODE(T1.R, 'C', 1, 0) + DECODE(T2.R, ASCII('C'), 1, 0) + DECODE(T3.R, ASCII('C'), 1, 0) + DECODE(T4.R, ASCII('C'), 1, 0)

18             + DECODE(T5.R, ASCII('C'), 1, 0) + DECODE(T6.R, ASCII('C'), 1, 0) + DECODE(T7.R, ASCII('C'), 1, 0)

19             + DECODE(T8.R, ASCII('C'), 1, 0) + DECODE(T9.R, ASCII('C'), 1, 0) + DECODE(T10.R, ASCII('C'), 1, 0) C,

20     DECODE(T1.R, ASCII('D'), 1, 0) + DECODE(T2.R, ASCII('D'), 1, 0) + DECODE(T3.R, ASCII('D'), 1, 0) + DECODE(T4.R, ASCII('D'), 1, 0)

21             + DECODE(T5.R, ASCII('D'), 1, 0) + DECODE(T6.R, ASCII('D'), 1, 0) + DECODE(T7.R, ASCII('D'), 1, 0)

22             + DECODE(T8.R, ASCII('D'), 1, 0) + DECODE(T9.R, ASCII('D'), 1, 0) + DECODE(T10.R, ASCII('D'), 1, 0) D

23  FROM T T1, T T2, T T3, T T4, T T5, T T6, T T7, T T8, T T9, T T10

24  WHERE DECODE(CHR(T2.R), 'A', 'C', 'B', 'D', 'C', 'A', 'B') = CHR(T5.R)

25  AND (CASE CHR(T3.R) WHEN 'A' THEN LEAST(T2.R, T4.R, T6.R) - GREATEST(T2.R, T4.R, T6.R)

26     WHEN 'B' THEN LEAST(T2.R, T3.R, T4.R) - GREATEST(T2.R, T3.R, T4.R)

27     WHEN 'C' THEN LEAST(T3.R, T4.R, T6.R) - GREATEST(T3.R, T4.R, T6.R)

28     ELSE LEAST(T2.R, T3.R, T6.R) - GREATEST(T2.R, T3.R, T6.R) END) = 0

29  AND (CASE CHR(T3.R) WHEN 'A' THEN T2.R - T3.R

30     WHEN 'B' THEN T2.R - T6.R

31     WHEN 'C' THEN T3.R - T2.R

32     ELSE T2.R - T4.R END) != 0

33  AND (CASE CHR(T4.R) WHEN 'A' THEN T1.R - T5.R

34     WHEN 'B' THEN T2.R - T7.R

35     WHEN 'C' THEN T1.R - T9.R

36     ELSE T6.R - T10.R END) = 0

37  AND (CASE CHR(T5.R) WHEN 'A' THEN T8.R - ASCII('A')

38     WHEN 'B' THEN T4.R - ASCII('B')

39     WHEN 'C' THEN T9.R - ASCII('C')

40     ELSE T10.R - ASCII('D') END) = 0

41  AND (CASE CHR(T6.R) WHEN 'A' THEN LEAST(T2.R, T4.R, T8.R) - GREATEST(T2.R, T4.R, T8.R)

42     WHEN 'B' THEN LEAST(T1.R, T6.R, T8.R) - GREATEST(T1.R, T6.R, T8.R)

43     WHEN 'C' THEN LEAST(T3.R, T10.R, T8.R) - GREATEST(T3.R, T10.R, T8.R)

44     ELSE LEAST(T5.R, T9.R, T8.R) - GREATEST(T5.R, T9.R, T8.R) END) = 0

45  AND (CASE CHR(T8.R) WHEN 'A' THEN ABS(T7.R - T1.R)

46     WHEN 'B' THEN ABS(T5.R - T1.R)

47     WHEN 'C' THEN ABS(T2.R - T1.R)

48     ELSE ABS(T10.R - T1.R) END) != 1

49  AND CASE CHR(T9.R) WHEN 'A' THEN T1.R - T6.R + T5.R - T6.R ELSE 1 END != 0

50  AND CASE CHR(T9.R) WHEN 'A' THEN (T1.R - T6.R) * (T5.R - T6.R) ELSE 0 END = 0

51  AND CASE CHR(T9.R) WHEN 'B' THEN T1.R - T6.R + T5.R - T10.R ELSE 1 END != 0

52  AND CASE CHR(T9.R) WHEN 'B' THEN (T1.R - T6.R) * (T5.R - T10.R) ELSE 0 END = 0

53  AND CASE CHR(T9.R) WHEN 'C' THEN T1.R - T6.R + T5.R - T2.R ELSE 1 END != 0

54  AND CASE CHR(T9.R) WHEN 'C' THEN (T1.R - T6.R) * (T5.R - T2.R) ELSE 0 END = 0

55  AND CASE CHR(T9.R) WHEN 'D' THEN T1.R - T6.R + T5.R - T9.R ELSE 1 END != 0

56  AND CASE CHR(T9.R) WHEN 'D' THEN (T1.R - T6.R) * (T5.R - T9.R) ELSE 0 END = 0)

57  SELECT CHR(R1) R1, CHR(R2) R2, CHR(R3) R3, CHR(R4) R4, CHR(R5) R5,

58     CHR(R6) R6, CHR(R7) R7, CHR(R8) R8, CHR(R9) R9, CHR(R10) R10

59  FROM RESULT

60  WHERE (CASE CHR(R7) WHEN 'A' THEN C

61     WHEN 'B' THEN B

62     WHEN 'C' THEN A

63     ELSE D END) = LEAST(A, B, C, D)

64  AND (CASE CHR(R10) WHEN 'A' THEN 3

65     WHEN 'B' THEN 2

66     WHEN 'C' THEN 4

67     ELSE 1 END) = (GREATEST(A, B, C, D) - LEAST(A, B, C, D));

R1      R2      R3      R4      R5      R6      R7      R8      R9      R10

------- ------- ------- ------- ------- ------- ------- ------- ------- -------

B       C       A       C       A       C       D       A       B       A

这个SQL的主要逻辑是:

通过 WITH 构造 A、B、C、D 四个选项;

把十道题的所有选项可能性穷举生成;

按照题意通过 WHERE 语句来进行条件限制;

第三题和第九题都是一道题对应一个 WHERE 语句;

第七题和第十题无法在第一层查询中获取,需要在第二层中过滤。

虽然用了一点技巧,但是总的来说SQL的逻辑比较清楚,欢迎大家探讨不同解并投稿给我们。

同类文章回顾:

用SQL解析神奇的扑克牌魔术

用SQL解海盗分金的利益最大化问题

无所不能用SQL挑战经典游戏汉诺塔

SQL竟然可以解脑筋急转弯的题目


资源下载

关注公众号:数据和云(OraNews)回复关键字获取

2018DTCC , 数据库大会PPT

2017DTC,2017 DTC 大会 PPT

DBALIFE ,“DBA 的一天”海报

DBA04 ,DBA 手记4 电子书

122ARCH ,Oracle 12.2体系结构图

2017OOW ,Oracle OpenWorld 资料

PRELECTION ,大讲堂讲师课程资料

近期文章

仅仅使用AWR做报告? 性能优化还未入门

实战课堂:一则CPU 100%的故障分析

杨廷琨:如何编写高效SQL(含PPT)

一份高达555页的技术PPT会是什么样子?

大象起舞:用PostgreSQL解海盗分金问题

刑侦高考:如何用SQL解决环环相扣的刑侦推理问题相关推荐

  1. 高手过招:用SQL解决环环相扣的刑侦推理问题(苏旭辉版本)

    苏旭晖,网名 newkid,ITPUB 开发版资深版主,SQL开发专家 本文是继 杨长老 刑侦高考:如何用SQL解决环环相扣的刑侦推理问题  之后,苏旭辉的一个版本,希望大家能够在高手的过招中,看到喜 ...

  2. 高手过招:用SQL解决环环相扣的刑侦推理问题(罗海雄版本)

    关注我们获得更多精彩内容! 本文是继 杨长老 刑侦高考:如何用SQL解决环环相扣的刑侦推理问题  之后(点击阅读原文查看历史信息),罗海雄老师提供了一个带注释的版本,希望初学者也能够直接看懂,不仅仅是 ...

  3. 2021_lg_03.SQL实战:如何用sql计算用户留存问题

    如何用sql计算用户留存问题 一.留存 1 .留存的含义: 留存:指基准日到APP的用户在之后的n日当天返回APP的人数: 留存率 = 基准日之后的n天当日返回的用户数 / 基准日的用户数 * 100 ...

  4. (转)MSSQL中如何用SQL清除所有表的数据(downmoon)?

    有朋友问起:MSSQL中如何用SQL清除所有表的数据?这个需求分三种类型: 第一:只要数据库中表是空的: 第二:表是空的,并且自增长列可以从1开始增长. 第三:表是空的,并且自增长列可以从1开始增长, ...

  5. SQL反模式笔记17——用一条sql解决复杂问题

    目标:检查sql查询次数 反模式:试图用一条sql解决复杂问题 结果是:性能很低,而且往往得到了一个笛卡尔积. 解决方案:分而治之 用多个sql得到数据,再进行整合.或者union多个sql的结果. ...

  6. 创建存储过程时出现的This function has none of DETERMINISTIC, NO SQL解决办法

    This function has none of DETERMINISTIC, NO SQL解决办法 创建存储过程时 出错信息: ERROR 1418 (HY000): This function ...

  7. 如何用SQL实现从第几条记录开始取几条

    如何用SQL实现从第几条记录开始取几条 ? select   top   10   *   from   (select   top   200   *   from   table   order ...

  8. 如何用SQL语句查询Excel数据

    Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT *  FROM OpenDataSource(  ...

  9. This function has none of DETERMINISTIC, NO SQL解决办法

    This function has none of DETERMINISTIC, NO SQL解决办法 创建存储过程时 出错信息: ERROR 1418 (HY000): This function ...

最新文章

  1. ios微信支付失败 php,iOS 微信支付疑难杂症。
  2. uva 725 Division(暴力模拟)
  3. 16行代码AC_蓝桥杯 2017年C组第三题 算式900(暴力解法+DFS解法)
  4. prometheus python client
  5. 再谈全局网HBase八大应用场景
  6. 计算机辅助设计与图像学学报 改后发表,几种常见图像二值化方法的结果对比与分析...
  7. 鸿蒙系统起飞!Flutter 完全适配指南
  8. 做真正Hacker 的乐趣──自己动手去实践
  9. 如何在Mac上将您的Apple ID更改为其他电子邮件地址?
  10. pycharm中文乱码
  11. php 发送curl跨域请求,php跨域传输(curl)
  12. Totem协议(SRP/RRP)讲解PPT
  13. selenium Element is not clickable because another element obscures it — 点击被页面上其他元素遮住的控件,亲试有效!!!
  14. 【BX学习之常用网址】 开发常用网址
  15. C# 原子操作 Interlocked
  16. FileZilla使用ssh服务和FTP服务连接Ubuntu
  17. unity 性能优化--内存篇(上)
  18. python读取超大文件 Python读取大文件(GB)
  19. Http 请求常见状态码报错(200/404/500)
  20. 非深户社保满一年走生育险流程。

热门文章

  1. 样本期望的期望 总体期望_您所在领域的人才期望开放
  2. 苹果和linux_苹果发布ResearchKit,Linux采用冲突代码,等等
  3. node Express 框架
  4. 深度学习笔记(46) 深度卷积网络学习
  5. 已编辑好的mysql_安装好的mysql改变数据库文件位置
  6. 计算机培训专业中心架,ASEM工业电脑工业计算机全系列自动化产品-销售中心
  7. 定义mysql日志_请教:如何查看mysql数据定义操作的日志
  8. layui获取input信息_python爬虫—用selenium爬取京东商品信息
  9. pandas打印某一列_2. Python--pandas库
  10. sql 超时时间已到.在操作完成之前超时时间已过或服务器未响应.,sqlserver Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应...