[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
这个方法好啊~以游戏的方式.
为支持楼主,我先来解第一道题吧。
  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

回复 4楼 的帖子

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

TOP

回复 6楼 的帖子

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

TOP

回复 12楼 的帖子

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

TOP

回复 14楼 的帖子

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

TOP

回复 16楼 的帖子

要求是3位数之间的,取余1000的话会包含2位数。
心绪平和,眼藏静谧。

TOP

这种写法有误,你漏掉了set/?中重要的一句话:“。。。这使您可以使用环境变量值做计算而不用键入那些 % 符号来得到它们的值。。。”
不必键入%来闭合变量,是因为在set/a的运算中,如果用到了变量截取,而截取的字符恰好是空值,不会扩展为0,而是空值。
set n=123,给n赋值,三位数--123
set/a zh=%n:~0,1%+%n:~1,1%+%2,1%
会被扩展为set/a zh=1+2+3,这样没错。
但现在的这个题目中,是随机数,未知多少位,如果n的值仍是123,如果写成:
set/a zh=%n:~0,1%+%n:~1,1%+%2,1%+%n:~3,1%
则会扩展为set/a zh=1+2+3+
%n:~3,1% 在此处替换为了空值,空留一个+跟在其后,set/a 中没有这样的用法,所以会提示找不到操作数。
在未知多少位的情况下,可以先用if来判断:
  1. @echo off&setlocal enabledelayedexpansion
  2. set h=!random!!random!!random!!random!
  3. for /l %%a in (0 1 10000) do (
  4.       if "!h:~%%a,1!" neq "" (
  5.            set/a zh+=!h:~%%a,1!
  6.            ) else (
  7.            echo !zh!
  8.            pause&exit/b
  9. ))
复制代码

以上代码,假设h的值是个小于10000位数的数。


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

TOP

排列组合的问题:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "var=a b c"
  3. for %%a in (%var%) do (
  4.       set "var1=!var:%%a=!"
  5.       for %%b in (!var1!) do (
  6.             set "var2=!var1:%%b=!"
  7.             for %%c in (!var2!) do (
  8.                   echo %%a %%b %%c
  9. )))
  10. pause
复制代码
关于求组合,这是最经常用到的方法,但不通用。
但细心则能发现其中的规律。
每行基本上都是一样的,变化的只有字符串常量%%b %%c %%d ....与!var1! !var2! !var3!...知道了这个规律,能否写出一个通用的呢~
以上,BATMAN版主的思路。
心绪平和,眼藏静谧。

TOP

返回列表