[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理一问一答,问为重

 n层:我问一个问题                    //当然问题要清楚,不要改来改去
n+1层:这层回答问题,并提出一个新问题
           //最好提出新问题
n+2层:如果上一层没有提出新问题,则这层必须提出一新问题  //可回答n层的问题,也可只提新问题


先来个:

列出100以内的素数

质数(又称为素数)


在所有比1大的整数中,除了1和它本身以外,不再有别的约数,这种整数叫做质数。
1

评分人数

这个方法好啊~以游戏的方式.
为支持楼主,我先来解第一道题吧。
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 2
  3. for /l %%a in (3 2 100) do set/a n=2,m=%%a&call :lp %%a
  4. pause>nul&exit/b
  5. :lp
  6. set/a mod=m%%n
  7. if %mod% equ 0 (
  8.    set "res=%res%%n%*"
  9.    set/a m/=n
  10.    goto lp
  11.    ) else (
  12.    set/a n+=1
  13.    if !n! leq !m! goto lp
  14. )
  15. if "!res:~,-1!" equ "%1" echo !res:~,-1!
  16. set "res="
复制代码
效率不怎么样,因为是先分解出每个数的质因数,最后再作比较,期待好的方案。
昨晚思维定向的厉害,简化:
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 2
  3. for /l %%a in (3 2 100) do (
  4.      set/a m=%%a-1,a=0
  5.      for /l %%i in (2 1 !m!) do (
  6.           set/a n=%%a%%%%i
  7.           if !n! equ 0 set a=1
  8.      )
  9.      if !a! equ 0 echo %%a
  10. )
  11. pause
复制代码
第2题:
列出100以内所有能被3整除的偶数。

[ 本帖最后由 pusofalse 于 2008-9-18 02:50 编辑 ]
心绪平和,眼藏静谧。

TOP

这种学习的思路妙,我来解第二题:
  1. @echo off
  2. :begin
  3. set /a n+=2,m=n*3
  4. if %m% lss 100 (
  5.    echo %m%&goto begin
  6.    ) else (
  7.    pause>nul
  8. )
复制代码
同时,本人给出第三题:
列出1-100内所有大于23小于90且能被5整除的偶数(比较容易哦)
***共同提高***

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (24,1,89) do (
  4. set a=%%i
  5. if "!a:~-1!"=="0" echo %%i
  6. )
  7. pause
复制代码
不知是否正确

原理很简单,大于 23,那就是从 24 开始,小于 90 那就只能到 89
被5整除,尾数就必须是 0  或 5 ,而又要求是偶数,所以只需要检测从24到89产生的数列中哪些数最后一位是0的那就满足要求了


第四题:

列出1-100内所有能被2和5整除的偶数(也很简单喔~~~)
1

评分人数

    • wxcute: 把24,1,89的1换成2只检测偶数。加油PB + 2

TOP

回复 4楼 的帖子

楼上的兄弟少了25 35 。。。
还有你的问题是既能被2整除,又要被5整除?
还是只是被2或5其中一个整除?
心绪平和,眼藏静谧。

TOP

原帖由 pusofalse 于 2008-9-18 17:50 发表
楼上的兄弟少了25 35 。。。
还有你的问题是既能被2整除,又要被5整除?
还是只是被2或5其中一个整除?


25,35……

是偶数吗?老师没教这个耶。。。

即可以被2整除,又可以被5整除,就是两个条件都要成立

比喻

10÷2=5
10÷5=2

TOP

回复 6楼 的帖子

oh。。。sorry,看错题意了~不好意思。
心绪平和,眼藏静谧。

TOP

前面的题目运行效率还有很大的提升空间啊!
回4F,投机取巧(现在的课本0是自然数也是偶数,奇怪)
测试代码:
  1. @echo off
  2. for /l %%i in (0 10 100) do echo 100以内能被2和5整除的数有: %%i
  3. pause>nul
复制代码
第五题:产生90个0-100间的不重复的随机数字

TOP

献丑了。。。
  1. @echo off&set n=1
  2. :st
  3. set /a w=%random%%%100
  4. if not defined %w% (
  5. if "%n%" LEQ "90" (
  6. echo %w%
  7. set w=ok
  8. set /a n+=1
  9. goto st
  10. )
  11. )
  12. pause
复制代码
代码还是有待提高。。。

暂时想不到要问什么问题,等待楼下出题。。Sorry!

PS:真想不透现在的课本,乍就这样呢,当时读的时候,0 可不是自然数啊

[ 本帖最后由 lovelymorning 于 2008-9-19 13:18 编辑 ]

TOP

9楼代码有问题,因为%w%是一直not defined的,所以运行结果是可能会有重复的
改成如下:
  1. @echo off
  2. :lp
  3. set/a n=%random%%%100
  4. if not defined _%n% (
  5. set _%n%=%n%
  6. echo %n%
  7. set/a num+=1
  8. )
  9. if not %num% gtr 90 goto :lp
  10. pause
复制代码
第六题:产生一个三位的随机数,并计算各位数字相加的和
(如:产生的随机数是123,和为1+2+3=6)(不难吧)

TOP

晕,漏了 set %w%=ok 百分号了,无语
  1. @echo off
  2. set n=1
  3. :st
  4. set /a w=%random%%%100
  5. if not defined %w% (
  6. if "%n%" LEQ "90" (
  7. echo %w%
  8. set %w%=ok
  9. set /a n+=1
  10. goto st
  11. )
  12. ) else goto st
  13. pause
复制代码
这个,不知行不

原先那个,我测试了好几次,都没出现重复,难道是RP较好?

这个,应该不会了吧?

TOP

回第六题:
  1. @echo off
  2. set /a n=%random%%%999+100
  3. echo %n%
  4. set /a h=%n:~0,1%+%n:~1,1%+%n:~-1%
  5. echo %h%
  6. pause
复制代码
不知这个合格不?

还是不知要问啥,老规矩,等楼下问吧



突然想到了,就俺来问吧

第七题:用 random 产生一个数,然后计算它的所有位数的相加和
比喻,产生了 1432  那就是 1+2+3+4=10
           产生了 4327 那就是 2+3+4+7=16

但 random 产生的数,位数又是不知的,又要计算它的和,难度应该不小吧。。。

楼下显高招。。。

[ 本帖最后由 lovelymorning 于 2008-9-19 23:02 编辑 ]

TOP

回复 12楼 的帖子

set /a n=%random%%%999+100
这里n的值有可能大于有可能是个4位数哦,比如998+100=1098>999
心绪平和,眼藏静谧。

TOP

原帖由 pusofalse 于 2008-9-19 23:08 发表
set /a n=%random%%%999+100
这里n的值有可能大于有可能是个4位数哦,比如998+100=1098>999


版主想问题就是全面,唉……菜鸟,总是缺这少那的

请问一下,如果改成 899  ,可以么?

TOP

回复 14楼 的帖子

^_^
set /a n=%random%%%899+100
如果除以899取余+100,那么n的值是999的概率就是0了,随机的概率应该相等吧。^_^
心绪平和,眼藏静谧。

TOP

返回列表