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

求1、2、3、4个数字组成三位数

  1. @echo off
  2. ::有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
  3. ::原创:sjzong
  4. setlocal enabledelayedexpansion
  5. set num=0
  6. for /l %%i in (1 1 4) do (
  7. for /l %%j in (1 1 4) do (
  8.   for /l %%k in (1 1 4) do (
  9.    if %%i neq %%j if %%i neq %%k if %%k neq %%j (echo %%i%%j%%k & set /a num=!num!+1)
  10.   )
  11. )
  12. )
  13. echo !num!
  14. pause
复制代码

[ 本帖最后由 sjzong 于 2009-4-3 12:40 编辑 ]

TOP

题目:对10个数进行排序

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::原创:sjzong
  4. echo 请输入十个数字……
  5. set str=
  6. for /l %%a in (1 1 10) do (
  7. set /p shuzi=请输入%%a个数:
  8. set str=!str! !shuzi!
  9. )
  10. set zimu=ABCDEFGHIJ
  11. set ss=
  12. for %%b in (!str!) do (
  13. set count=0
  14. for %%c in (!str!) do if %%b geq %%c set /a count=!count!+1
  15. set /a count=!count!-1
  16. set ss=!ss! !count!
  17. )
  18. for /l %%d in (0 1 9) do (
  19. set cou=
  20. for %%e in (!ss!) do if %%d==%%e set /a cou=!cou!+1
  21. for /l %%f in (1 1 !cou!) do set num=!num! !zimu:~%%d,1!
  22. )
  23. for %%i in (!str!) do (
  24. set count=0
  25. for %%j in (!str!) do if %%i geq %%j set /a count=!count!+1
  26. set /a count=!count!-1
  27. if !count!==0 set num=!num:A=%%i!
  28. if !count!==1 set num=!num:B=%%i!
  29. if !count!==2 set num=!num:C=%%i!
  30. if !count!==3 set num=!num:D=%%i!
  31. if !count!==4 set num=!num:E=%%i!
  32. if !count!==5 set num=!num:F=%%i!
  33. if !count!==6 set num=!num:G=%%i!
  34. if !count!==7 set num=!num:H=%%i!
  35. if !count!==8 set num=!num:I=%%i!
  36. if !count!==9 set num=!num:J=%%i!
  37. )
  38. echo 你输入的十个数字是:!str!
  39. echo 排序后的十个数字是:!num!
  40. pause
复制代码

[ 本帖最后由 sjzong 于 2009-4-3 12:42 编辑 ]

TOP

打印杨辉三角

  1. @echo off
  2. ::打印杨辉三角
  3. ::原创:sjzong
  4. setlocal enabledelayedexpansion
  5. set str= 1
  6. echo !str!
  7. for /l %%a in (1 1 9) do (
  8. ::求出上一个数列的相邻两个数的和。
  9. set num1=1
  10. for %%b in (!str!) do (
  11. ::num1是用来控制是相邻两数的前一个数%%i;num2为后一个数%%j
  12. set /a num1=!num1!+1
  13. set /a shu=!num1!+1
  14. set num2=1
  15. for %%c in (!str!) do (
  16. set /a num2=!num2!+1
  17. if !num2!==!shu! set /a sum=%%b+%%c
  18. )
  19. set str1=!str1! !sum!
  20. set sum=
  21. )
  22. ::在求出每相邻两数之和后,在前后各加上1
  23. set str=1!str1!1
  24. ::用来打印时在数字的前面加上空格
  25. set /a a=10-%%a
  26. set b=
  27. for /l %%d in (0 1 !a!) do (set b= !b!)
  28. set str=!b!!str!
  29. set str1=
  30. echo !str!
  31. )
  32. pause
复制代码
1

评分人数

    • tyc: 用num1、num2来控制上一行的相邻二数 用b来 ...PB + 2

TOP

纠错了!!【程序21】猴子吃桃问题

【程序21】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.程序分析:采取逆向思维的方法,从后往前推断。
答案:见32楼
注意:32楼那个是错误的!那是先吃一个再吃一半的,所以公式a=2*a+1;而本题是先吃一半后再多吃一个,所以公式为a=2*(a+1)。
  1. @echo off&setlocal EnableDelayedExpansion
  2. ::程序分析: 注意是先吃一半再吃一个则公式是a=2*(a+1)
  3. ::原创:sjzong
  4. set num=1
  5. echo 第10天时有!num!个桃子
  6. for /l %%i in (9 -1 1) do (
  7. set /a num=!num!*2+2
  8. echo 第 %%i天时有!num!个桃子)
  9. pause
复制代码

[ 本帖最后由 sjzong 于 2009-4-5 14:44 编辑 ]

TOP

纠错了!【程序80】猴子分桃子,那个也是有错误的!

【程序80】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只
   猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了
   一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
   问海滩上原来最少有多少个桃子?
答案:见44楼
44楼 这个程序也是错误的!正确的是如下:
  1. @echo off&setlocal EnableDelayedExpansion
  2. ::程序分析:这些桃子,每一只猴子来分的时候,把桃子的数量减一后必须是五的倍数!所以五只猴子来分,必须进行五次判断的!
  3. ::程序中的num是用来判断是否达到五次判断!
  4. ::原创:sjzong
  5. for /l %%i in (1 1 10000) do (
  6. set /a a=%%i
  7. set /a num=0
  8. for /l %%j in (1 1 5) do (
  9.   set /a b=!a!-1
  10.   set /a c=!b! %% 5
  11.   if !c! == 0 (
  12.   set /a a=!b!/5
  13.   set /a a=!a!*4
  14.   set /a num=!num!+1)
  15. )
  16. if !num!==5 (echo 最少要%%i只桃子 & goto :end)
  17. )
  18. :end
  19. pause
复制代码

[ 本帖最后由 sjzong 于 2009-4-5 14:44 编辑 ]

TOP

【程序37】题目:对10个数进行排序

题目:对10个数进行排序
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::原创:sjzong
  4. echo 请输入十个数字……
  5. ::读入10个数字,分别放在t1~t10内,并把数字合成一行,中间加个空格。
  6. set str=
  7. for /l %%a in (1 1 10) do (
  8. set /p t%%a=请输入%%a个数:
  9. set str=!str! !t%%a!
  10. )
  11. echo 排序前的数字序列是:!str!
  12. ::数字排序是采用冒泡排序的,每相邻的两个数进行比较,大的放在后面。
  13. ::要进行9趟比较,第1趟求出最大放在最后一个数…第9趟是剩下两个数进行比较
  14. ::其实t%%b代表相邻的前一个数,b代表相邻的后一个数,比较后进行交换
  15. for /l %%a in (1 1 9) do (
  16. set /a a=10-%%a
  17. for /l %%b in (1 1 !a!) do (
  18.   set /a c=%%b+1
  19.   set /a b=t!c!
  20.   if !t%%b! gtr !b! (
  21.    set /a temp=t%%b
  22.    set /a t%%b=t!c!
  23.    set /a t!c!=!temp!
  24.   )
  25. )
  26. )
  27. ::把排序后的数字排列出来
  28. set str=
  29. for /l %%a in (1 1 10) do (
  30. set str=!str! !t%%a!
  31. )
  32. echo 排序后的数字序列是:!str!
  33. pause
复制代码

[ 本帖最后由 sjzong 于 2009-4-7 00:59 编辑 ]

TOP

【程序37】题目:对10个数进行排序

题目:对10个数进行排序
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
      下次类推,即用第二个元素与后8个进行比较,并进行交换。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::原创:sjzong
  4. echo 请输入十个数字……
  5. ::读入10个数字,分别放在t1~t10内,并把数字合成一行,中间加个空格。
  6. set str=
  7. for /l %%a in (1 1 10) do (
  8. set /p t%%a=请输入%%a个数:
  9. set str=!str! !t%%a!
  10. )
  11. echo 排序前的数字序列是:!str!
  12. ::数字排序是采用选择排序的,取第1个数跟后面的9个数进行比较,大的话进行交换。
  13. ::然后取第2个数跟后面的8个数进行比较,大的进行交换,以此类推。
  14. for /l %%a in (1 1 9) do (
  15. set /a a=%%a+1
  16. for /l %%b in (!a! 1 10) do (
  17.   if !t%%a! gtr !t%%b! (
  18.    set /a temp=t%%a
  19.    set /a t%%a=t%%b
  20.    set /a t%%b=!temp!
  21.   )
  22. )
  23. )
  24. ::把排序后的数字排列出来
  25. set str=
  26. for /l %%a in (1 1 10) do (
  27. set str=!str! !t%%a!
  28. )
  29. echo 排序后的数字序列是:!str!
  30. pause
复制代码

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

TOP

【程序24】题目:有一分数序列2/1,3/2,5/3……的和

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
          1.程序分析:请抓住分子与分母的变化规律。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::原创:sjzong
  4. ::程序分析:每个数的分子是上一个数的分子与分母之和,分母为上一个数的分子
  5. ::fz为分子,fm为分母
  6. set fz=1
  7. set fm=1
  8. set qiuji=1
  9. set qiuhe=0
  10. echo 正在输出这二十个数……
  11. for /l %%i in (1 1 20) do (
  12. set /a c=!fm!
  13. set /a fm=!fz!
  14. set /a fz=!fz!+!c!
  15. echo !fz!^/!fm!
  16. set /a qiuji=!qiuji!*!fz!/!fm!
  17. set /a qiuhe=!qiuhe!+!fz!/!fm!
  18. )
  19. echo.
  20. echo 这二十个数的积为:!qiuji!
  21. echo 这二十个数的和为:!qiuhe!
  22. echo.
  23. pause
复制代码

[ 本帖最后由 sjzong 于 2009-4-7 00:56 编辑 ]

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楼 的帖子

【程序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

返回列表