返回列表 发帖

批处理一问一答,问为重

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


先来个:

列出100以内的素数

质数(又称为素数)


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

评分人数

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

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

TOP

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

TOP

@echo off
setlocal enabledelayedexpansion
for /l %%i in (24,1,89) do (
set a=%%i
if "!a:~-1!"=="0" echo %%i
)
pauseCOPY
不知是否正确

原理很简单,大于 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是自然数也是偶数,奇怪)
测试代码:
@echo off
for /l %%i in (0 10 100) do echo 100以内能被25整除的数有: %%i
pause>nulCOPY
第五题:产生90个0-100间的不重复的随机数字

TOP

献丑了。。。
@echo off&set n=1
:st
set /a w=%random%%%100
if not defined %w% (
if "%n%" LEQ "90" (
echo %w%
set w=ok
set /a n+=1
goto st
)
)
pauseCOPY
代码还是有待提高。。。

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

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

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

TOP

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

TOP

晕,漏了 set %w%=ok 百分号了,无语
@echo off
set n=1
:st
set /a w=%random%%%100
if not defined %w% (
if "%n%" LEQ "90" (
echo %w%
set %w%=ok
set /a n+=1
goto st
)
) else goto st
pauseCOPY
这个,不知行不

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

这个,应该不会了吧?

TOP

回第六题:
@echo off
set /a n=%random%%%999+100
echo %n%
set /a h=%n:~0,1%+%n:~1,1%+%n:~-1%
echo %h%
pauseCOPY
不知这个合格不?

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



突然想到了,就俺来问吧

第七题:用 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

返回列表