|
ccwan
金牌会员
积分 2725
发帖 1160
注册 2006-9-23 来自 河北廊坊
状态 离线
|
『第
16 楼』:
不错。对算法有研究。
|
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。 |
|
2006-11-13 21:08 |
|
|
kennyfan
中级用户
积分 259
发帖 112
注册 2006-9-18
状态 离线
|
『第
17 楼』:
哇..深入...学习ing!!!
|
|
2006-11-13 22:08 |
|
|
zouzhxi
中级用户
蝴蝶之吻
积分 430
发帖 177
注册 2006-9-20 来自 广东深圳
状态 离线
|
|
2006-11-15 00:26 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
19 楼』:
哈哈……有意思~:)
可以开批处理与数据结构算法专版了~:)
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-11-15 00:42 |
|
|
zouzhxi
中级用户
蝴蝶之吻
积分 430
发帖 177
注册 2006-9-20 来自 广东深圳
状态 离线
|
|
2006-11-15 02:25 |
|
|
Michale
初级用户
积分 52
发帖 27
注册 2006-10-6 来自 ☆逍遥宫☆
状态 离线
|
『第
21 楼』:
不错~~看了那么的处理~~觉得楼上的几个处理蛮漂亮的~~值得大家一起来研究研究~~谢谢大家~~~
|
|
2006-11-15 03:56 |
|
|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
22 楼』:
建议 zouzhxi 把所有的问题都集中在顶楼,以 序号+内容 的格式列出来,每解决一个,就在这个序号后做个标记或者说明,这样就能让大家看到这个帖子都有哪些有意思的话题。
|
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2006-11-15 06:36 |
|
|
youxi01
高级用户
积分 846
发帖 247
注册 2006-10-27 来自 湖南==》广东
状态 离线
|
『第
23 楼』:
终于又回来了!
回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 ]
|
|
2006-11-15 07:24 |
|
|
youxi01
高级用户
积分 846
发帖 247
注册 2006-10-27 来自 湖南==》广东
状态 离线
|
『第
24 楼』:
答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 ]
|
|
2006-11-15 07:46 |
|
|
zouzhxi
中级用户
蝴蝶之吻
积分 430
发帖 177
注册 2006-9-20 来自 广东深圳
状态 离线
|
『第
25 楼』:
应namejm的要求:
Quote: | #序号 !解决 ?未解决
#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,求被除数。 |
|
Quote: | #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 ]
|
Butterfly Kiss Blog
计算机DIY联盟论坛 |
|
2006-11-15 08:10 |
|
|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
26 楼』:
Quote: | 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没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2006-11-15 08:10 |
|
|
youxi01
高级用户
积分 846
发帖 247
注册 2006-10-27 来自 湖南==》广东
状态 离线
|
『第
27 楼』:
对于楼上的斑竹的 “因为我们要做的,就是用代码来模拟题意,如果能直接推出某些条件,则可以充分利用这些条件;如果需要经过两步以上的推理才能得出的条件” 的说法,在下不敢苟同!
我曾经用(纯)批处理写过一篇求100000之内的素数的问题,如果根据楼上的说法,模拟题意的话,那写出的代码运行效率实在是不敢恭维!
对于一些推导性的结论,特别是比较快速的可以推导的结论,我觉得就都可以运用。
|
|
2006-11-15 08:18 |
|
|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
28 楼』:
呵呵,不敢苟同的做法是对的,因为我没有说出我的前提条件:当我们要研究某些通用算法的时候,应该尽量模拟题意写代码;如果是写应用型的脚本,基于效率优先的原则,则可以充分利用一切可以正确推导出来的条件——在这里之所以提出尽量模拟的说法,是因为我们在这里主要讨论的是通用算法。当然,并不意味着要排斥技巧性非常强的代码。
|
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2006-11-15 08:31 |
|
|
lxmxn
版主
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
29 楼』:
在用批处理玩数字游戏的时候,要注意数字的范围哦,超过就会溢出了。
-2147483648——2147483647 (WINDOWS XP SP2 @ CMD Shell)
|
|
2006-11-15 09:27 |
|
|
youxi01
高级用户
积分 846
发帖 247
注册 2006-10-27 来自 湖南==》广东
状态 离线
|
『第
30 楼』:
不错,好多问题了!先回答几题!
第八题:
@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 ]
|
|
2006-11-15 12:14 |
|