批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

选择排序法

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::选择排序法
  4. echo 共输入10个数
  5. for /l %%i in (1,1,10) do (
  6. set /p a_%%i=请输入%%i个数
  7. set str=!str! !a_%%i!
  8. )
  9. echo %str%
  10. for /l %%i in (1,1,9) do (
  11. set /a b=%%i+1
  12. for /l %%j in (!b!,1,10) do (
  13.    if !a_%%i! gtr !a_%%j! (
  14.       set /a t=a_%%i
  15.       set /a a_%%i=a_%%j
  16.       set /a a_%%j=t
  17.     )
  18. )
  19. )
  20. for /l %%i in (1,1,10) do (
  21. set str1=!str1! !a_%%i!
  22. )
  23. echo %str1%
  24. pause>nul
复制代码

TOP

【程序14】题目:将一个正整数分解质因数。

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:分解质因数实际就是把这数除以素数列(2 3 5 7 11 13……),从2开始除,不整除的话,换下一个素数;整除的话,就记下该数字,并求出商;若商不为1,则再把商去除素数列;商为1,就停止,表明分解结束。
由于素数列第一个数为2,后面为奇数组,所以进行判断时,等于2时就加1,不等于2时就加2,这里面有个问题就是多进行无用循环,如9 15等!还有结果是,例如:输入90,打印出90=1*2*3*3*5。
  1. @echo off&setlocal EnableDelayedExpansion
  2. set /p num=请输入要因数分解的数:
  3. set str=!num!=1
  4. :a
  5. set /a n=2
  6. :b
  7. set /a aa=!num! %% !n!
  8. ::这if语句是能整除的语句,求出商,并记下那个质数n
  9. if !aa! equ 0 (
  10.   set /a num=!num!/!n!
  11.   set str=!str!*!n!
  12. ::等于1,分解结束,跳到c,不等于1,继续把商除以素数列,跳到a
  13.   if !num! neq 1 (goto :a) else (goto :c)
  14. )
  15. ::这if语句是不能整除的,换下一个素数,并跳到b
  16. if !aa! neq 0 (
  17. ::若等于2时n+1,不等于2时n+2
  18.   if !n! equ 2 (set /a n=!n!+1) else (set /a n=!n!+2)
  19.   goto :b
  20. )
  21. :c
  22. echo 分解完是:!str!
  23. pause
复制代码

[ 本帖最后由 sjzong 于 2009-4-9 00:53 编辑 ]
1

评分人数

    • tyc: 兄弟写的代码能当教案了!真是好。PB + 2

TOP

【程序84】题目:一个偶数总能表示为两个素数之和。

程序分析:这个偶数应该是大于3的偶数,但是大于3的偶数中4是比较特殊的,可拆为两个2的和;其他的偶数一定要拆成两个奇数的和,然后分别判断这两个数是否为素数即可。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::原创:sjzong
  4. set /p num=请输入大于3的偶数:
  5. set /a aa=!num! %% 2
  6. rem 判断输入的数字是否为偶数
  7. if !aa! neq 0 (
  8. cls
  9. echo 你输入的数字不是偶数!
  10. set /p num=请再次输入大于3的偶数:
  11. )
  12. rem 判断输入的数字是否小于等于3
  13. if !num! leq 3 (
  14. cls
  15. echo 你输入的数字小于4!
  16. set /p num=请再次输入大于3的偶数:
  17. )
  18. rem 判断输入的偶数是否为4,是的话直接拆分为两个2的和,不是的话进行两个奇数的拆分。
  19. if !num!==4 (echo 偶数 !num! 是素数 2 与 2 的和。) else (
  20. set /a yiban=!num!/2
  21. rem 拆分偶数时只需从3到该偶数的一半即可
  22. for /l %%a in (3 2 !yiban!) do (
  23.   set /a shu=!num!-%%a
  24.   set /a a1=0
  25.   set /a a2=0
  26.   call :test %%a
  27.   if !flag!==1 set /a a1=1
  28.   call :test !shu!
  29.   if !flag!==1 set /a a2=1
  30.   if !a1!==1 if !a2!==1 echo 偶数 !num! 是素数 %%a 与 !shu! 的和。
  31. )
  32. )
  33. pause
  34. goto :eof
  35. rem 判断该数是否为素数时,只需计算从1到该数的一半能被该数整除的次数
  36. rem 次数为1时表示为素数,次数大于1时表示不是素数
  37. :test
  38.   set /a flag=1
  39.   set /a b=%1/2
  40.   set /a count=0
  41.   for /l %%a in (1 1 !b!) do (
  42.    set /a yushu=%1 %% %%a
  43.    if !yushu! equ 0 set /a count=!count!+1
  44.    if !count! gtr 1 (set /a flag=0 & goto :eof)
  45.   )
复制代码

[ 本帖最后由 sjzong 于 2009-4-10 10:01 编辑 ]

TOP

八进制转十进制

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::判断是否为八进制,共几位
  4. :1
  5. set /p bb=请输入八进制整数:
  6. set /a aa=%bb%
  7. set /a n=0
  8. :2
  9. set b=%aa:~,1%
  10. if %b% gtr 8  goto :1
  11. set /a n=n+1
  12. set aa=!aa:~1!
  13. if "%aa%" neq "" goto :2
  14. ::echo %n%
  15. ::利用权值,求各位十进制值并累加
  16. :3
  17. set /a n-=1
  18. set /a c=%bb:~0,1%
  19. for /l %%i in (1,1,%n%) do set /a c*=8
  20. set /a t+=%c%
  21. set bb=%bb:~1%
  22. if "%bb%" neq "" goto :3
  23. echo %t%
  24. pause>nul
复制代码

[ 本帖最后由 tyc 于 2009-4-10 10:33 编辑 ]

TOP

十进制转任意进制

  1. @echo off
  2. set /p x=要转换的数:
  3. set /p y=要转换的进制:
  4. call :10 %x% %y%
  5. pause>nul
  6. goto :eof
  7. :10
  8. set/a t=%1/%2
  9. if %t% gtr 0 call :10 %t% %2
  10. set /a b=%1%%%2
  11. set /p=%b% <nul
复制代码

[ 本帖最后由 tyc 于 2009-4-12 12:17 编辑 ]

TOP

精华啊。。 我很是喜欢!!

TOP

好了,我承认,你们都是神!
一个菜鸟瞠目结舌,蹚乎其后

TOP

看到我都快头晕了,不过很好很强大。

TOP

回复 1楼 的帖子

【程序69】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
改一下:设有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺序。
  1. @echo off&setlocal enabledelayedexpansion
  2. :n
  3. cls
  4. set /p n=请输入人数n:
  5. echo.%n%|findstr "^[1-9][0-9]*$">nul||goto n
  6. :m
  7. set /p m=请输入报数m:
  8. echo.%m%|findstr "^[1-9][0-9]*$">nul||goto m
  9. for /l %%a in (1 1 %n%) do (if %%a lss 10 (set str=!str! 0%%a) else (set str=!str! %%a))
  10. set/a b=3*!m!-3
  11. set/a c=3*!m!
  12. :loop
  13. if "!str:~%b%,3!" equ "" (set s1= 空) else (set s1=!s1!!str:~%b%,3!)
  14. if "!str:~%c%,3!" equ "" (set str=!str:~0,%b%!) else (set str=!str:~%c%!!str:~0,%b%!)
  15. set/a n-=1
  16. if not !n! lss !m! goto loop
  17. echo 出列的数据是:!s1:~1!&set s1=
  18. if !m! equ 1 (echo 剩下的数据是:空&set str=) else (echo 剩下的数据是:!str:~1!&set str=)
  19. pause>nul&goto n
复制代码

TOP

就是需要这样的贴子啊,给新手们的帮助太大了,看完了教程就得要这样的东西来练练

TOP

回复 104楼 的帖子

其实本论坛,还有很多给新手出的题目,在 新手练功区 版块。
(*^_^*)

TOP

来学学,本是也不会

正在找人教

TOP

答题::组成多少个互不相同且无重复数字的三位数?

程序1
  1. @ECHO OFF
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (1,1,4) do (
  4.      for /l %%j in (1,1,4) do (
  5.          for /l %%k in (1,1,4) do (
  6.                  if not %%i==%%j (
  7.                      if not %%i==%%k (
  8.                          if not %%j==%%k echo %%i%%j%%k)
  9.                            )
  10.                            )
  11.                            )
  12.                            )
  13. pause
复制代码

[ 本帖最后由 nopr 于 2009-8-5 20:39 编辑 ]

TOP

答题::判断这一天是这一年的第几天?

  1. @ECHO OFF
  2. setlocal enabledelayedexpansion
  3. :1
  4. echo 查询日期请介于1900和2200年之间
  5. ping /n 1 127.1>nul
  6. set /p b=请输入年份:....
  7. if %b% leq 1900 echo 你输入年份不符合要求,请重新输入!&ping /n 2 127.1>nul&cls&goto 1
  8. if %b% gtr 2200 echo 你输入年份不符合要求,请重新输入!&ping /n 2 127.1>nul&cls&goto 1
  9. :2
  10. cls
  11. set /p b1=请输入月份:
  12. if %b1% lss 1 goto 2
  13. if %b1% gtr 12 goto 2
  14. :3
  15. cls
  16. set /p b2=请输入日期:
  17. if %b2% lss 1 goto 3
  18. if %b2% gtr 31 goto 3
  19. cls&set /a b3=%b1%-1
  20. call :4
  21. for /l %%i in (1,1,%b3%) do (
  22.          for %%j in (1 3 5 7 8 10 12) do (
  23.              if %%i == %%j (set /a a+=31)
  24.              )
  25.          for %%k in (4 6 9 11) do (
  26.              if %%i == %%k (set /a a1+=30)
  27.              )
  28.              )
  29. for /l %%h in (1900 4 2200) do echo %%h>>a.txt
  30. find "%b%" a.txt >nul && (set /a a2=%a1%+29) || set /a a2=%a1%+28
  31. set /a a3=%a%+%a2%+%b2%
  32. echo 你要查询的日期是%b%的第%a3%天
  33. del a.txt&pause>nul&goto :eof
  34. :4
  35. for /l %%y in (1 1 20) do (
  36.      set /p=*<nul
  37.      for /l %%z in (1 1 500) do ver>nul
  38.      )
  39. cls
  40. goto :eof
复制代码

TOP

题目:输出9*9口诀

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (1,1,9) do (
  4.      echo.
  5.      for /l %%j in (1,1,9) do (
  6.      set /a aa=%%i*%%j
  7.      set a=%%jx%%i=!aa!
  8.      if %%j leq %%i set/p=!a! <nul
  9.      )
  10.      )
  11. pause>nul
复制代码

TOP

返回列表