标题: [数值计算] 【趣味数学】批处理平均倒水问题 [打印本页]
作者: 523066680 时间: 2009-3-21 14:15 标题: 【趣味数学】批处理平均倒水问题
可参考这个帖子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 编辑 ]
作者: 523066680 时间: 2009-3-21 14:39
继续探索,发现:
类似有10升 分 5 5升
但是题目如果规定有 10 5+1 5-1 即 10 6 4 升的杯子是不能得到解的
因为10 6 4 全是偶数 怎么减也不可能减出一个奇数。
所以只能 10 7 3的杯子为题。
根据后面的几个不能用此方法求解的例子,判断:
杯子类型为 2n n+2 n-2 升杯子 分 n n 的 , 的皆不能用上面的方法解。
不知道还有啥规律没
[ 本帖最后由 523066680 于 2009-3-21 14:54 编辑 ]
作者: 523066680 时间: 2009-3-21 15:16
俺将hat的代码进行了修改,想窥探倒水的规律
代码如下:
@echo off
setlocal EnableDelayedExpansion
set x=18
set y=11
set z=7
set a=%x%
set b=0
set c=0
set n=0
:water1
if %a% neq %b% (
set /a n+=1
if %b% equ 0 (
set /a a-=y
set /a b=y
set now=a to b
) else (
if %c% equ %z% (
set /a a+=z
set c=0
set now=c to a
) else (
set /a t=z-c
if %b% gtr !t! (
set /a b-=t
set /a c=z
set now=b to c
) else (
set /a c+=b
set b=0
set now=b to c
)
)
)
if defined now (
if "!now:~0,1!"=="a" (echo,!now!)
if "!now:~0,1!"=="b" (echo, !now!)
if "!now:~0,1!"=="c" (echo, !now!)
)
goto :water1
)
pause
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |