CODE: [Copy to clipboard]
@echo off &setlocal enabledelayedexpansion
title code by hi.baidu.com/523066680
mode con cols=85 lines=25
set /a a=8,b=5,c=3,ah=8,bh=0,ch=0,fo=-1
set ab=ab
echo,容器容量分别为 a-8 b-5 c-3 单位-升
echo,
echo,初状态 a=%ah% b=%bh% c=%ch%
:for
set /a fo+=1,fo2=fo+1,p=fo%%2
if %p% equ 0 (set "no1=a") else (set "no1=b")
set "no2=!ab:%no1%=!"
if !%no2%h! equ 0 (
if !%no1%h! leq !%no2%! (
set /a %no2%h=%no1%h,%no1%h=0
) else (
set /a %no2%h=%no2%,%no1%h=%no1%h-%no2%
)
set "say= %no1% 大于 4 ,但 %no2% 没有水,比 c 优先从 %no1% 获取水.(否则可能走回头路)"
goto :next
)
if !%no1%h! gtr 4 (
set /a "%no1%h-=c-ch,ch=c"
set "say= %no1% 大于 4 ,往 c 倒."
goto :next
)
if !%no1%h! lss 4 (
if %ch% equ 0 (
set /a ch+=%no1%h,cc-=%no1%h,%no1%h=0
set "say= %no1% 小于 4 ,但 c 没有水,又要改变现状,故 %no1% 往 c 倒"
) else (
set /a m=%no1%h+ch-%no1%
if !m! leq 0 (set /a m=0)
set /a %no1%h=%no1%h+ch-m,ch=0+m
set "say= %no1% 小于 4 , c 往 %no1% 倒."
)
)
:next
echo, %say%
echo,step%fo2% %ah% %bh% %ch%
if !%no1%h! neq 4 (goto :for)
if !%no2%h! neq 4 (goto :for)
echo,
echo,到这里就 a=%ah% b=%bh% c=%ch% 啦
echo, &echo,按任意键退出 &pause>nul
这里是啰嗦部分:CODE: [Copy to clipboard]
@echo off&setlocal enabledelayedexpansion
set "Tab= "这里替换为TAB键
set /p _n=输入你要分出的量:
set/a a=16,b=9,c=7,x=0,yb=a-b-c
if %yb% lss 0 (set/a y=a-b)else set/a y=c
echo;%Tab%%a% %Tab%%b%%Tab%%c%
echo.&echo.初始%Tab%%a%%Tab%0%Tab%0&echo.
set/a a1=a,a2=0,a3=0
call:next %b% %c% %y%
if %yb% lss 0 (set/a y=a-c)else set/a y=b
echo.&echo.初始%Tab%%a%%Tab%0%Tab%0&echo.
set/a a1=a,a2=0,a3=0,n=0
call:next %c% %b% %y%
pause&exit
:next
if %a1% equ %_n% (exit/b)else if %a2% equ %_n% (exit/b)else if %a3% equ %_n% exit/b
set/a n+=1
if %a2% equ 0 (
if %a3% equ %2 echo 不能分出你要的量&pause&exit
if %a3% geq %3 (set /a a2=%1-a3+%3) else set/a a2=%1
) else (
if %a3% leq %3 (
set/a a2-=%2-a3,a3=%2
if !a2! leq 0 set /a a3+=a2,a2=0
)
if %a3% geq %3 set a3=0
)
set/a a1=a-a2-a3
echo 第%n%次%Tab%%a1% %Tab%%a2%%Tab%%a3%
goto next
[