标题: [其他] 批处理答[思考题]凶手、被害、帮凶、目击者 [打印本页]
作者: aa77dd@163.com 时间: 2015-6-4 17:49 标题: 批处理答[思考题]凶手、被害、帮凶、目击者
答 [思考题]凶手、被害、帮凶、目击者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- @echo off & setlocal enabledelayedexpansion
-
- set "$F=父" & set "$M=母" & set "$S=儿子" & set "$D=女儿"
- set /a "F=S=0, M=D=1" & REM 性别 男=0, 女=1
- set /a "@F=16, @M=8, @S=4, @D=2"
- set "P1=F M S D" & rem 父 母 子 女
- set "kids=S D" & rem 儿子和女儿
-
- FOR %%O IN (F) DO ( REM 父亲年纪最大
- FOR %%Y IN (%KIDS%) DO ( REM youngest 最年轻者
- FOR %%A IN (!P1!) DO ( REM accessary 帮凶
- SET "P2=!P1:%%A=!"
- FOR %%V IN (!P2!) DO ( REM victim 受害人
- SET "P3=!P2:%%V=!"
- FOR %%K IN (!P3!) DO ( REM killer 凶手
- SET "P4=!P3:%%K=!"
- FOR %%E IN (!P4!) DO ( REM eyewitness 目击者
- SET /A "TEST= (%%A ^^ %%E) & (%%O ^^ %%E) & (%%Y ^^ %%V) & (^!(@%%Y & @%%A) & ^!(@%%V & @%%O)) & ^!(@%%Y & @%%K)"
- IF !TEST!==1 (
- ECHO 帮凶:!$%%A!, 受害人:!$%%V!, 凶手:!$%%K!, 目击者:!$%%E!, 最年轻:!$%%Y!
- )
- )
- )
- )
- )
- )
- )
- pause
- exit
复制代码
结果
帮凶:父, 受害人:儿子, 凶手:母, 目击者:女儿, 最年轻:女儿
作者: 523066680 时间: 2015-6-4 18:28
斯国一
作者: Bella 时间: 2015-6-4 21:34
本帖最后由 Bella 于 2015-6-5 11:46 编辑
出题区回不了贴
作者: 523066680 时间: 2015-6-4 21:46
回复 3# Bella
难怪单独开帖,以前水的人太多。
作者: bailong360 时间: 2015-6-6 12:20
回复 12# aa77dd@163.com
lz还是快点删掉这些无意义回复吧,不然等会反倒被扣分就不好了
作者: aa77dd@163.com 时间: 2015-6-6 15:38
本帖最后由 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
- @echo off & setlocal enabledelayedexpansion
-
- set /a "fsum_rem=30"
-
- for /l %%i in (9 -1 0) do set /a "g%%i = 1"
-
- call :f_search 9
- pause&exit
-
- :f_search
- setlocal
-
- set /a "t=%1 - 2 >> 31, fi_up=t & 21 | ~t & (19 + %1) / (t | (%1 - 1))"
-
- if %1==0 if !fi_up! gtr 3 set "fi_up=3"
-
- set /a "t=fsum_rem - %1, t1=(t - fi_up) >> 31, fi_up=(t1 & t) | (~t1 & fi_up)"
-
- if %1 lss 0 (
- echo !f0!,!f1!,!f2!,!f3!,!f4!,!f5!,!f6!,!f7!,!f8!,!f9!
-
- if "!f0!,!f1!,!f2!,!f3!,!f4!,!f5!,!f6!,!f7!,!f8!,!f9!"=="!g0!,!g1!,!g2!,!g3!,!g4!,!g5!,!g6!,!g7!,!g8!,!g9!" (
- echo
- >>result.txt echo !f0!,!f1!,!f2!,!f3!,!f4!,!f5!,!f6!,!f7!,!f8!,!f9!
- )
-
- exit /b
- ) else (
- set /a next = %1 - 1
-
- for /l %%i in (!g%1! 1 !fi_up!) do (
- set /a "f%1 = %%i"
-
- set /a "fsum_rem -= f%1"
-
- set /a "a=f%1 / 10, b=f%1 %% 10"
-
- set /a "g!a! += ^!^! a, g!b! += 1"
-
- call :f_search !next!
-
- set /a "g!a! -= ^!^! a, g!b! -= 1"
-
- set /a "fsum_rem += f%1"
- )
-
- )
- endlocal& exit /b
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |