可参考这个帖子http://www.cn-dos.net/forum/viewthread.php?tid=42458
[出题]批处理趣味数学之平分水的问题
有一个8升的瓶子装满水,还有一个5升的空瓶子和一个3升的空瓶子。要求将水分成两个4升,请用批处理给出解决方案。
我平时没事就琢磨琢磨,找出一点不通用的规律 却也有趣,今天是来分享这点小规律的。
且先看4 3 1 的杯子 分 2 2的
a b c
4 0 0 a to b
1 3 0 b to c
1 2 1 c to a
2 2 0
这是短的, 8 5 3 的杯子也类似
a b c
8 0 0 a to b
3 5 0 b to c
3 2 3 c to a
6 2 0 b to c
6 0 2 a to b
1 5 2 b to c
1 4 3 c to a
4 4 0
想必这会儿已经看出规律了吧 ,不过像10 7 3 的就不能用这个了,遗憾。
但已知这个方式能解决的例子有[20以内]:
4 3 1 \ 8 5 3 \ 12 7 5 \ 16 9 7 \ 20 11 9
不行的有:6 5 1 \ 10 7 3 \ 14 9 5 \ 18 11 7- @echo off &setlocal enabledelayedexpansion
- set /a a=28,b=15,c=13
- set /a an=a,bn=0,cn=0,ah=a/2
- echo, %an% --- %bn% --- %cn%
- :a
- for %%a in ("a b" "b c" "c a" "b c") do (call :next %%~a)
- goto :a
- :next
- set /a cut=%2 - %2n
- if !%1n! gtr %cut% (set /a %1n-=cut,%2n+=cut
- ) else (set /a %2n+=%1n,%1n=0)
- echo,%1 to %2 -^> %an% --- %bn% --- %cn%
- if %an%%bn% equ %ah%%ah% pause>nul &exit
复制代码 tab被空格取代了 我还是上传源码txt吧。
虽然不通用,不过算是一点点小小发现,公布一下。
[ 本帖最后由 523066680 于 2009-3-21 15:19 编辑 ] |