中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-31 21:20
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论][探讨] 用批处理作趣味数学题 精华I 查看 36,405 回复 139
16 发表于 2006-11-13 21:08 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
不错。对算法有研究。
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
17 发表于 2006-11-13 22:08 ·  中国 广东 广州 天河区 电信
中级用户
★★
积分 259
发帖 112
注册 2006-09-18 04:55
19年会员
UID 62928
性别 男
状态 离线
哇..深入...学习ing!!!
18 发表于 2006-11-15 00:26 ·  IANA 局域网IP(Private-Use)
中级用户
★★
蝴蝶之吻
积分 430
发帖 177
注册 2006-09-20 12:00
19年会员
UID 63170
来自 广东深圳
状态 离线
为了促进算法研究,,,呵呵。。


有一个五位奇数,将这个五位奇数中的所有2都换成5,所有5也都换成2,其他数保持不变,得到一个新的五位数,若新五位数的一半仍比原五位数大1,那么原五位数是多少?
19 发表于 2006-11-15 00:42 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
哈哈……有意思~:)
可以开批处理与数据结构算法专版了~:)
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
20 发表于 2006-11-15 02:25 ·  IANA 局域网IP(Private-Use)
中级用户
★★
蝴蝶之吻
积分 430
发帖 177
注册 2006-09-20 12:00
19年会员
UID 63170
来自 广东深圳
状态 离线
五个连续自然数的和分别能被2、3、4、5、6整除,求满足此条件的最小的一组数。
21 发表于 2006-11-15 03:56 ·  中国 上海 教育网
初级用户
积分 52
发帖 27
注册 2006-10-06 00:44
19年会员
UID 64647
来自 ☆逍遥宫☆
状态 离线
不错~~看了那么的处理~~觉得楼上的几个处理蛮漂亮的~~值得大家一起来研究研究~~谢谢大家~~~
22 发表于 2006-11-15 06:36 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  建议 zouzhxi 把所有的问题都集中在顶楼,以 序号+内容 的格式列出来,每解决一个,就在这个序号后做个标记或者说明,这样就能让大家看到这个帖子都有哪些有意思的话题。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
23 发表于 2006-11-15 07:24 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
终于又回来了!
回18楼,答案是:29995。
给出的测试代码:



@echo off & echo 正在检测数据...
setlocal enabledelayedexpansion
for /l %%a in (0 1 9) do (
for /l %%b in (0 1 9) do (
for /l %%c in (0 1 9) do (
set/a Fnum=2%%a%%b%%c5
set Bnum=!Fnum:5=A!
set Bnum=!Bnum:2=5!
set/a Bnum=!Bnum:A=2!
set/a Fnum_=2*!Fnum!+2
if !Bnum! EQU !Fnum_! echo !Fnum!
)))
echo 检测完毕!
pause>nul



说明:该程序在XP pro sp2下测试通过。
解决这个问题,首先我们要明确这个数字结尾必须是5,因为只有这样,才可以在转化后才是偶数,才可以被2整除;而且首位数字必须是2......

[ Last edited by youxi01 on 2006-11-16 at 11:38 PM ]
24 发表于 2006-11-15 07:46 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
答20楼:答案是10 11 12 13 14


@echo off
echo 正在检测数据....
setlocal enabledelayedexpansion
for /l %%i in (1 1 10000) do (
set /a flag=0
set /a num=5*%%i+10
set /a num1=!num!%%4
set /a num2=!num!%%5
set /a num3=!num!%%6
for %%a in (!num1! !num2! !num3!) do (
if %%a NEQ 0 set /a flag=1
)
if !flag! EQU 0 set /a num=%%i & goto :exit
)
:exit
for /l %%i in (0 1 4) do (
set /a num%%i=%num%+%%i
)
echo 要求的连续的5个自然数为:%num0% %num1% %num2% %num3% %num4%
pause>nul



xp pro sp2下测试通过。

[ Last edited by youxi01 on 2006-11-16 at 11:38 PM ]
25 发表于 2006-11-15 08:10 ·  IANA 局域网IP(Private-Use)
中级用户
★★
蝴蝶之吻
积分 430
发帖 177
注册 2006-09-20 12:00
19年会员
UID 63170
来自 广东深圳
状态 离线
应namejm的要求:


#序号 !解决 ?未解决

#01 !
求水仙花数?

#02 !
有四个数,其中任意三个数相加,所得的和分别是84,88,99,110,求这四个数?

#03 !
赵姑娘的岁数有以下特点:
1. 它的3次方是一个四位数,而4次方是一个六位数;
2. 这四位数和六位数正好是0到9这十个数字组成.
问,这个数应该是什么数?

#04 !
排一本辞典的页码共用了4889个数字。这本辞典共有多少页? 答案:1499

#05 !
阿聪说他这次去西北看见一群骆驼,共有23个驼峰,60只脚。请问单、双峰骆驼各多少只?

#06 !
有一个五位奇数,将这个五位奇数中的所有2都换成5,所有5也都换成2,其他数保持不变,得到一个新的五位数,若新五位数的一半仍比原五位数大1,那么原五位数是多少?

#07 !
五个连续自然数的和分别能被2、3、4、5、6整除,求满足此条件的最小的一组数。

#08 !
我是个三位数,其中有一个数字是“3”,还有一个数字是“1”,另一个数字是未知数。如果把“3”变成“4”、把“1”变成“3”,那么,原来的我将比假设后的我的一半还少“9”。你知道原来是个什么数?

#09 ?
农夫琼斯对他老婆说:"喂,玛丽亚,如果照我的办法,卖掉75只小鸡,那么咱们的鸡饲料还能维持20夭。然而,假使照你的建议,再买进100只小鸡的话,那么鸡饲料将只够维持15天。"
"啊,亲爱的,"她答道,"那我们现在有多少只小鸡呢?"
问题就在这里了,他们究竟有多少只小鸡?

#10 !
在所有的5位数当中,只包含两个3的数字有多少个?

#11 !
将17分成几个自然数的和,求这几个自然数的最大乘积是多少?

#12 ?
将自然数2、3......乘到一起,它们的积的最后6位数恰好都是0,最后一个自然数最少可能是几?

#13 !
被除数、除数和商三个数的和是181,商是12,求被除数。


#14 ?
商店里有六箱货物,分别重15、16、18、19、20、31千克,两个顾客买走了其中五箱.已知一个顾客买的货物重量是另一个顾客的2倍,那么,商店剩下的一箱货物重量是多少千克?

#15 ?
一个数除以3的余数是2,除以5的余数是1,则这个数除以15的余数是多少?

#16 ?
1. p是质数,且p×p+1也是质数。求2006×p。
2. 2006个2的乘积除以7的余数是多少。



[ Last edited by zouzhxi on 2006-11-15 at 09:39 PM ]
26 发表于 2006-11-15 08:10 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
Originally posted by youxi01 at 2006-11-14 18:24:
解决这个问题,首先我们要明确这个数字结尾必须是5,因为只有这样,才可以在转化后才是偶数,才可以被2整除;而且首位数字必须是2......

  23F的思路有缺陷,因为我们要做的,就是用代码来模拟题意,如果能直接推出某些条件,则可以充分利用这些条件;如果需要经过两步以上的推理才能得出的条件,最好不要使用,而应交给代码来处理;否则,既然经过两步推理得出的条件可以使用,那么,三步的呢?四步的呢?N步的呢?最后一步不就包含在第N步中么?那样的话,我们完全可以把需要经过N步才能得出的结论直接写出来,从而完全抛弃代码——虽然最后你的结果是正确的,但是建议不要这样做。

  在23F的基础上,给出一个解决18F的问题、尽量模拟题意的代码(速度很慢):

@echo off
setlocal enabledelayedexpansion
for /l %%i in (10001,2,99999) do (
set num=%%i
set num=!num:5=a!
if not "!num!"=="%%i" (
set num_tmp1=!num!
set num=!num:2=5!
if not "!num!"=="!num_tmp1!" (
set num=!num:a=2!
set /a num_tmp2=2*%%i+2
if !num! equ !num_tmp2! echo %%i
)
)
)
pause

  再给出一个比较快一点的代码:

@echo off
setlocal enabledelayedexpansion
for /l %%i in (10005,5,99995) do (
set num=%%i
set num=!num:5=a!
if not "!num!"=="%%i" (
set num_tmp1=!num!
set num=!num:2=5!
if not "!num!"=="!num_tmp1!" (
set num=!num:a=2!
set /a num_tmp2=2*%%i+2
if !num! equ !num_tmp2! echo %%i
)
)
)
pause


  23F的代码可精简为:

@echo off
setlocal enabledelayedexpansion
for /l %%i in (20005,5,29995) do (
set num=%%i
set num=!num:5=a!
set num=!num:2=5!
set num=!num:a=2!
set /a num_tmp=2*%%i+2
if !num! equ !num_tmp! echo %%i
)
pause


[ Last edited by namejm on 2006-11-15 at 12:57 PM ]
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
27 发表于 2006-11-15 08:18 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
对于楼上的斑竹的 “因为我们要做的,就是用代码来模拟题意,如果能直接推出某些条件,则可以充分利用这些条件;如果需要经过两步以上的推理才能得出的条件” 的说法,在下不敢苟同!

我曾经用(纯)批处理写过一篇求100000之内的素数的问题,如果根据楼上的说法,模拟题意的话,那写出的代码运行效率实在是不敢恭维!

对于一些推导性的结论,特别是比较快速的可以推导的结论,我觉得就都可以运用。
28 发表于 2006-11-15 08:31 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  呵呵,不敢苟同的做法是对的,因为我没有说出我的前提条件:当我们要研究某些通用算法的时候,应该尽量模拟题意写代码;如果是写应用型的脚本,基于效率优先的原则,则可以充分利用一切可以正确推导出来的条件——在这里之所以提出尽量模拟的说法,是因为我们在这里主要讨论的是通用算法。当然,并不意味着要排斥技巧性非常强的代码。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
29 发表于 2006-11-15 09:27 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线

  在用批处理玩数字游戏的时候,要注意数字的范围哦,超过就会溢出了。

  -2147483648——2147483647 (WINDOWS XP SP2 @ CMD Shell)
30 发表于 2006-11-15 12:14 ·  中国 广东 清远 联通
高级用户
★★
积分 846
发帖 247
注册 2006-10-27 12:03
19年会员
UID 68504
性别 男
来自 湖南==》广东
状态 离线
不错,好多问题了!先回答几题!
第八题:


@echo off
rem 经推算,首位数字必须为1,(除非未知数为1,为1的情况在第一个for中也处理了)
setlocal enabledelayedexpansion
for /l %%i in (0 1 9) do (
set /a Fnum=1%%i3
set /a Bnum=3%%i4
set /a num=!Bnum!/2-9
if !Fnum! EQU !num! echo !Fnum!)

for /l %%i in (0 1 9) do (
set /a Fnum=13%%i
set /a Bnum=34%%i
set /a num=!Bnum!/2-9
if !Fnum! EQU !num! echo !Fnum!)
pause>nul



第九题:


@echo off
rem 小鸡的只数至少有76只:

setlocal enabledelayedexpansion
for /l %%i in (76 1 10000) do (
set /a Fnum=%%i*20-75*20
set /a Bnum=%%i*15+100*15
if !Fnum! EQU !Bnum! echo 小鸡的只数为:%%i & goto :exit)
:exit
pause>nul



第十题:来一个比较巧一点的办法:(效率可能相对要高,没测试!)


@echo off
echo 正在检测数据........
setlocal enabledelayedexpansion
set /a flag=0
for /l %%i in (10000,1,99999) do (
set num=%%i
rem 前面加个1是为了防止类似30820的特殊情况。
set /a num=1!num:3=!
if !num! lss 2000 if !num! gtr 200 set /a flag+=1)
echo %flag%
echo 检测完毕!
pause>nul


[ Last edited by youxi01 on 2006-11-16 at 11:41 PM ]
论坛跳转: