谁说批处理只能做简单操作?本文用if/goto循环、call递归、for循环、交互式输入四种方法,逆向求解经典的猴子吃桃问题,展示批处理脚本的编程逻辑之美。
用多种批处理方法计算C语言中经典的"猴子吃桃问题"
1猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又把剩下的桃子吃掉了一半,又多吃了一个,以后每天早上都吃前一天剩下的一半零一个,到第十天早上想再吃时,见只剩下一个桃子,求第一天共摘了多少个桃子。
1、方法一:用 if 和 goto
@echo off
setlocal enabledelayedexpansion
set day=10
set x1=1
set x2=0
echo 第!day!天,桃子数为:!x1!个
:count
if not !day! lss 2 (
set /a x1=x1+1
set /a x2=x1*2
set /a x1=x2
set /a day-=1
echo 第!day!天,桃子数为:!x2!个
goto count
)
pause
2、方法二:用 if 和 call
@echo off
setlocal enabledelayedexpansion
set day=10
set x1=1
set x2=0
echo 第!day!天,桃子数为:!x1!个
:count
if not !day! lss 2 (
set /a x1=x1+1
set /a x2=x1*2
set /a x1=x2
set /a day-=1
echo 第!day!天,桃子数为:!x2!个
call :count
)
pause
3、方法三:用 for循环
@echo off
setlocal enabledelayedexpansion
set day=10
set x1=1
set x2=0
for /l %%i in (10,-1,1) do (
echo 第%%i天,桃子数为:!x1!个
set /a x1=x1+1
set /a x2=x1*2
set /a x1=x2
)
pause
4、改进成人机对话模式
@echo off
setlocal enabledelayedexpansion
title "用bat解决C语言中经典的"猴子吃桃问题""
color F2
echo.
echo.
echo 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又把剩下的桃子吃掉了一半,又多吃了一个,以后每天早上都吃前一天剩下的一半零一个,到第N天早上想再吃时,见只剩下一个桃子,求第一天共摘了多少个桃子。
echo.
echo.
:begin
set /p num=请输入N的值,查看计算结果:
echo.
set x1=1
set x2=0
for /l %%i in (!num!,-1,1) do (
echo 第%%i天,桃子数为:!x1!个
set /a x1=x1+1
set /a x2=x1*2
set /a x1=x2
)
echo.
echo.
goto begin
pause
效果如下:
注:猴子吃桃问题,在C语言中也有多种解决方法,详情请看:
C语言一题多解:猴子吃桃+自由落体+比赛对阵——3个经典问题的N种实现对比(附完整代码)
计算机科学与技术 & 计算机网络技术:双专业课程体系完全导航指南