找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 16001|回复: 5

[其他] 批处理答[思考题]凶手、被害、帮凶、目击者

[复制链接]
发表于 2015-6-4 17:49:08 | 显示全部楼层 |阅读模式
答  [思考题]凶手、被害、帮凶、目击者http://bbs.bathome.net/viewthread.php?tid=35974

问题规模不是很大, 所以以循环穷举来解

对以下各变量, 以单词首字母表示:
youngest 最年轻者
accessary 帮凶
victim 受害人
killer 凶手
eyewitness 目击者

1、帮凶和目击者性别不同
A == !E  <==>  A ^ E == TRUE

5、父亲年纪最大
O := F

2、最年长者和目击者性别不同
O == !E <==>  O ^ E == TRUE

3、最年轻者和被害者性别不同
Y == !V <==>  Y ^ V == TRUE

4、帮凶年纪比被害者大
必要条件:
Y <> A 且 V <> O

6、最年轻的不是凶手
Y <> K
  1. @echo off & setlocal enabledelayedexpansion

  2. set "$F=父" & set "$M=母" & set "$S=儿子" & set "$D=女儿"
  3. set /a "F=S=0, M=D=1" & REM 性别 男=0, 女=1
  4. set /a "@F=16, @M=8, @S=4, @D=2"
  5. set "P1=F M S D" & rem 父 母 子 女
  6. set "kids=S D" & rem 儿子和女儿

  7. FOR %%O IN (F) DO ( REM 父亲年纪最大
  8.    FOR %%Y IN (%KIDS%) DO ( REM youngest 最年轻者
  9.       FOR %%A IN (!P1!) DO ( REM accessary 帮凶
  10.          SET "P2=!P1:%%A=!"
  11.          FOR %%V IN (!P2!) DO ( REM victim 受害人
  12.             SET "P3=!P2:%%V=!"
  13.             FOR %%K IN (!P3!) DO ( REM killer 凶手
  14.                SET "P4=!P3:%%K=!"
  15.                FOR %%E IN (!P4!) DO ( REM eyewitness 目击者
  16.                   SET /A "TEST= (%%A ^^ %%E) & (%%O ^^ %%E) & (%%Y ^^ %%V) & (^!(@%%Y & @%%A) & ^!(@%%V & @%%O)) & ^!(@%%Y & @%%K)"
  17.                                   IF !TEST!==1 (
  18.                                         ECHO 帮凶:!$%%A!, 受害人:!$%%V!, 凶手:!$%%K!, 目击者:!$%%E!, 最年轻:!$%%Y!
  19.                                   )
  20.                )
  21.             )
  22.          )
  23.       )
  24.    )
  25. )
  26. pause
  27. exit
复制代码
结果
帮凶:父, 受害人:儿子, 凶手:母, 目击者:女儿, 最年轻:女儿

评分

参与人数 2PB +24 技术 +2 收起 理由
CrLf + 12 + 1 卧槽,pb助攻
523066680 + 12 + 1 学习了

查看全部评分

发表于 2015-6-4 18:28:03 | 显示全部楼层
斯国一
发表于 2015-6-4 21:34:21 | 显示全部楼层
本帖最后由 Bella 于 2015-6-5 11:46 编辑

出题区回不了贴

评分

参与人数 1PB +12 技术 +1 收起 理由
523066680 + 12 + 1 学习了

查看全部评分

发表于 2015-6-4 21:46:47 | 显示全部楼层
回复 3# Bella


    难怪单独开帖,以前水的人太多。

评分

参与人数 1技术 +1 收起 理由
Bella + 1 乐于助人

查看全部评分

发表于 2015-6-6 12:20:15 | 显示全部楼层
回复 12# aa77dd@163.com


    lz还是快点删掉这些无意义回复吧,不然等会反倒被扣分就不好了
 楼主| 发表于 2015-6-6 15:38:32 | 显示全部楼层
本帖最后由 aa77dd@163.com 于 2015-6-6 15:44 编辑

本想刷分到 50, 结果一小时里只能发 10 帖, 也到不了, 而且删帖后分也没了.
OK, 慢慢等吧

以下答 [思考题]0-9在这10句话中出现的次数
http://www.bathome.net/redirect.php?tid=35997&goto=lastpost#lastpost

找到两个结果.
1,11,2,1,1,1,1,1,1,1
1,7,3,2,1,1,1,2,1,1

  1. @echo off & setlocal enabledelayedexpansion

  2. set /a "fsum_rem=30"

  3. for /l %%i in (9 -1 0) do set /a "g%%i = 1"

  4. call :f_search 9
  5. pause&exit

  6. :f_search
  7. setlocal

  8. set /a "t=%1 - 2 >> 31, fi_up=t & 21 | ~t & (19 + %1) / (t | (%1 - 1))"

  9. if %1==0 if !fi_up! gtr 3 set "fi_up=3"

  10. set /a "t=fsum_rem - %1, t1=(t - fi_up) >> 31, fi_up=(t1 & t) | (~t1 & fi_up)"

  11. if %1 lss 0 (
  12.         echo !f0!,!f1!,!f2!,!f3!,!f4!,!f5!,!f6!,!f7!,!f8!,!f9!

  13.         if "!f0!,!f1!,!f2!,!f3!,!f4!,!f5!,!f6!,!f7!,!f8!,!f9!"=="!g0!,!g1!,!g2!,!g3!,!g4!,!g5!,!g6!,!g7!,!g8!,!g9!" (
  14.                 echo 
  15.                 >>result.txt echo !f0!,!f1!,!f2!,!f3!,!f4!,!f5!,!f6!,!f7!,!f8!,!f9!
  16.         )

  17.         exit /b
  18. ) else (
  19.         set /a next = %1 - 1

  20.         for /l %%i in (!g%1! 1 !fi_up!) do (
  21.                 set /a "f%1 = %%i"

  22.                 set /a "fsum_rem -= f%1"

  23.                 set /a "a=f%1 / 10, b=f%1 %% 10"

  24.                 set /a "g!a! += ^!^! a, g!b! += 1"

  25.                 call :f_search !next!

  26.                 set /a "g!a! -= ^!^! a, g!b! -= 1"

  27.                 set /a "fsum_rem += f%1"
  28.         )

  29. )
  30. endlocal& exit /b

复制代码

评分

参与人数 1PB +24 收起 理由
523066680 + 24 答题送积分

查看全部评分

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 02:40 , Processed in 0.018877 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表