中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-08 03:59
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 出题目,全是我从C语言的题目中挑出来的 查看 2,605 回复 38
16 发表于 2008-04-11 21:10 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
水仙花数

建议使用3重循环……
17 球落地问题(程序20): 发表于 2008-04-11 21:42 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
因cmd局限于10位数字,用这种方法仅能精确算出球第10次落地弹起的高度,对于10次经过的距离不能精确计算(郁闷中):
@echo off
set /a n=100*10000000&set m=0
:begin
if %m% gtr 0 set str=%str%+2*%n%
if %m% gtr 0 set /a str=%str%/10000000
set /a n/=2&set /a m+=1
if %m% lss 10 goto begin
set /a str=%str%+100/2
echo 第10次球落地后共经过%str%米的距离
:lp
if "%n:~,-6%"=="" set n=0%n%
if "%n:~,-6%"=="" goto lp
echo 第10次弹起为0.%n%米
pause>nul


[ Last edited by zw19750516 on 2008-4-11 at 10:05 PM ]
批处理之家新域名:www.bathome.net
18 年纪问题(程序28): 发表于 2008-04-11 22:26 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
@echo off&setlocal enabledelayedexpansion
set n=10
for %%i in (2,2,2,2) do set /a n+=%%i&cls&echo 第五个人年纪是!n!岁
pause>nul
批处理之家新域名:www.bathome.net
19 发表于 2008-04-11 22:34 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
水仙花算法 确实三重循环为好 下面的忘记是那位版主写的 记得是namejm 版主写的:

@echo off
echo.
echo 三位的水仙花数有:
echo.
setlocal enabledelayedexpansion
for /l %%i in (1,1,9) do (
for /l %%j in (0,1,9) do (
for /l %%k in (0,1,9) do (
set a=%%i
set b=%%j
set c=%%k
set num1=!a!!b!!c!
set /a num2=!a!*!a!*!a!+!b!*!b!*!b!+!c!*!c!*!c!
if !num1! equ !num2! echo !num1!
)
)
)
pause
goto :eof
简单!简单!再简单!
20 奇数个数(程序83): 发表于 2008-04-11 22:35 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
@echo off
set /a str=6*7*7*7*7*7*4
echo 能组成%str%个奇数
pause>nul
批处理之家新域名:www.bathome.net
21 发表于 2008-04-11 22:41 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by terse at 2008-4-11 22:34:
水仙花算法 确实三重循环为好 下面的忘记是那位版主写的 记得是namejm 版主写的:

@echo off
echo.
echo 三位的水仙花数有:
echo.
setlocal ...

我不这样认为,我的代码就能很好地实现了(开始是少打了个*),何必还要写这么复杂的代码。
批处理之家新域名:www.bathome.net
22 发表于 2008-04-11 23:47 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
从效率讲,3重循环比从111循环到999好。

对程序代码来说效率是第一的。
23 发表于 2008-04-11 23:54 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
如果代简单的话 那就直接SET/a var
var=!str:~,1!!str:~,1!*!str:~,1!+!str:~1,1!*!str:~1,1!*!str:~1,1!.....
简单!简单!再简单!
24 发表于 2008-04-12 00:16 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
个人认为 15楼和19楼没什么效率上的区别。
倒是15楼把延迟变量放到for内部有点多此一举。
若想证明效率谁的高,最好靠事实说话
求 1-10000 的水仙花数,同时记录下批处理运行时间,不就有结果了?
致精致简!
25 发表于 2008-04-12 00:43 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数

15楼的:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (100,1,999) do (

set str=%%i
set/a a=!str:~,1!, b=!str:~1,1!, c=!str:~2,1!
set /a var=!a!*!a!*!a!+!b!*!b!*!b!+!c!*!c!*!c!
if !var! equ !str! echo !str!

)
pause



19楼的:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,9) do for /l %%j in (0,1,9) do for /l %%k in (0,1,9) do (

set/a a=%%i,b=%%j,c=%%k
set num1=!a!!b!!c!
set /a num2=!a!*!a!*!a!+!b!*!b!*!b!+!c!*!c!*!c!
if !num1! equ !num2! echo !num1!

)
pause


[ Last edited by plp626 on 2008-4-12 at 12:51 AM ]
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
26 发表于 2008-04-12 07:12 ·  中国 四川 成都 双流区 电信
新手上路
积分 18
发帖 8
注册 2008-04-04 10:40
18年会员
UID 114923
性别 男
状态 离线
先谢谢各位了
27 发表于 2008-04-12 14:45 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
循环次数上一样麽?
哪个更少呢?
取每位,和将几位合起来那个更快呢?
28 发表于 2008-04-12 15:00 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
Originally posted by slore at 2008-4-12 14:45:
循环次数上一样麽?
哪个更少呢?
取每位,和将几位合起来那个更快呢?

求 1-10000 的水仙花数,同时记录下批处理运行时间,不就有结果了?
致精致简!
29 发表于 2008-04-12 16:09 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
Originally posted by 26933062 at 2008-4-12 03:00 PM:

求 1-10000 的水仙花数,同时记录下批处理运行时间,不就有结果了?




两个时间一样,误差在0.01秒以内,小于%time%的“系统”误差。
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
30 发表于 2008-04-12 16:31 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
如果你可以测试到99999999999999999999999999999999999的话……
论坛跳转: