Board logo

标题: 从C语言的题目中挑出来的题目给批处理新手做 [打印本页]

作者: huajinghua    时间: 2008-4-10 19:24     标题: 从C语言的题目中挑出来的题目给批处理新手做

所发代码若不止一行,请用code标签把代码部分括起来。

Q: 如何用code把代码扩起来?
A: http://bbs.bathome.net/thread-404-1-1.html

参考:批处理之家论坛使用常见问题FAQ
http://bbs.bathome.net/thread-3473-1-1.html


申请加精!
本人从《C语言资料大全》中搜的题目,给新手学习,给高手练习。呵呵。本人也没时间做,留给大家做咯。
=================================================================
                                                                                                                     ----------QQ:327828994

【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
      掉不满足条件的排列。


答案:见5楼
**********************************************************************************

【程序4】
题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
      情况,闰年且输入月份大于3时需考虑多加一天。

答案:见6楼
**********************************************************************************

【程序8】
题目:输出9*9口诀。
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

答案:见7楼
**********************************************************************************


【程序9】
题目:要求输出国际象棋棋盘。
1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。


答案:见36楼
**********************************************************************************

【程序11】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
   后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....

答案:见10楼
**********************************************************************************

【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
      则表明此数不是素数,反之是素数。

答案:请参考13,15楼
**********************************************************************************


【程序13】
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
   本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。


答案:见18,19楼
**********************************************************************************



【程序14】
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
 重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。


答案:见23,24楼
**********************************************************************************


【程序16】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
::作者提示:资料中未说明何为辗除法。根据C源码可知,辗除法(若a>b,让数a对数b求模得到c,再让数b对数c求模,得到d,再让c对d求模,一直循环直到最后的求模余数n=0)

答案:见27楼
**********************************************************************************

【程序19】
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
   找出1000以内的所有完数。
【程序20】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
   第10次落地时,共经过多少米?第10次反弹多高?


答案:见37,38楼
**********************************************************************************

【程序21】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.程序分析:采取逆向思维的方法,从后往前推断。


答案:见32楼
**********************************************************************************




【程序23】
题目:打印出如下图案(菱形)
*
***
******
********
******
***
*
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
      for循环,第一层控制行,第二层控制列。



答案:见21楼

**********************************************************************************




【程序25】
题目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加变成了累乘。


答案:见33楼
**********************************************************************************

【程序28】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第
   3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后
   问第一个人,他说是10岁。请问第五个人多大?
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道
      第四人的岁数,依次类推,推到第一人(10岁),再往回推。


**********************************************************************************

【程序30】
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。


答案:见34楼

**********************************************************************************

【程序37】
题目:对10个数进行排序
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
      下次类推,即用第二个元素与后8个进行比较,并进行交换。


**********************************************************************************

【程序61】
题目:打印出杨辉三角形(要求打印出10行如下图)   
1.程序分析:
       1
      1  1
      1  2  1
      1  3  3  1
      1  4  6  4  1
      1  5  10 10 5  1 

答案:见22楼

**********************************************************************************



【程序69】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出
   圈子,问最后留下的是原来第几号的那位。
【程序80】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只
   猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了
   一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
   问海滩上原来最少有多少个桃子?
答案:见44楼

**********************************************************************************



【程序81】
题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。


**********************************************************************************

【程序83】
题目:求0—7所能组成的奇数个数。


**********************************************************************************

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


**********************************************************************************

【程序24】
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1.程序分析:请抓住分子与分母的变化规律。


**********************************************************************************

【程序67】
题目:输入一个数,最大的与第一个元素交换,最小的与最后一个元素交换,然后输出。


**********************************************************************************

【程序82】
题目:八进制转换为十进制


**********************************************************************************

作者: fml520    时间: 2008-4-10 19:30

哈哈  沙发。对 来说太难了
作者: huajinghua    时间: 2008-4-10 19:44

如果谁能全部用批处理做出来,那绝对可以成为高手。哈哈
作者: youxi01    时间: 2008-4-10 22:49

大多的问题在dos联盟里已经解决了
可以考虑加精
欢迎各位朋友继续"突破"
作者: youxi01    时间: 2008-4-10 23:23     标题: 求数字不同的排列组合

论坛里前几天就出现了相关代码,测试代码:
  1. @echo off &setlocal enabledelayedexpansion
  2. set "str=1 2 3 4 "
  3. for %%a in (%str%) do (
  4.         set var1=!str:%%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.         )
  11. )
  12. pause>nul
复制代码

作者: youxi01    时间: 2008-4-10 23:43     标题: 求某日期在一年中是第几天

测试代码:
  1. @echo off &setlocal enabledelayedexpansion
  2. set /p Cdate=请输入日期(如:2008-1-2日或2008/01/02):
  3. for /f "tokens=1-3 delims=/-, " %%a in ("%Cdate%") do (
  4. set/a yy=%%a,mm=100%%b%%100,dd=100%%c%%100
  5. )
  6. call ate2Day %yy%-1-1 days1
  7. call ate2Day %Cdate% days2
  8. set/a res=days2-days1+1
  9. echo.&echo %yy%年%mm%月%dd%日 是 %yy%年 的第 %res% 天。
  10. pause>nul
  11. goto :eof
  12. ::注意:以下"函数"由willsort完成(略有改动);
  13. ate2Day 日期 传回(数值)结果
  14. setlocal ENABLEEXTENSIONS
  15. for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (
  16.   set yy=%%a & set mm=%%b & set dd=%%c
  17. )
  18. set /a dd=100%dd%%%100,mm=100%mm%%%100
  19. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  20. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  21. endlocal&set %2=%j%&goto :EOF
  22. ay2Date 数值 传回(日期)结果
  23. setlocal ENABLEEXTENSIONS
  24. set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  25. set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
  26. set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  27. (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
  28. endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF
复制代码

作者: youxi01    时间: 2008-4-10 23:53     标题: 打印99乘法表

此题namejm已经做了,测试代码:
  1. @echo off &setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 9) do (
  3.         for /l %%b in (1 1 %%a) do (
  4.                 set/a res=%%a*%%b
  5.                 set "res=!res!  " %======此处用来对齐=========%
  6.                 set/p=%%ax%%b=!res:~0,2!  <nul
  7.         )
  8.         echo.
  9. )
  10. pause>nul
复制代码

作者: youxi01    时间: 2008-4-10 23:55     标题: 程序9

意思不明:“控制输出黑方格,还是白方格。”
是这样吗:□和■
作者: huajinghua    时间: 2008-4-11 10:23

不错不错,高手不愧是高手
作者: huajinghua    时间: 2008-4-11 10:34

继续兔子问题哈。不能一直管理员做题,我也做,这是我写的,测试没有错。
@echo off&setlocal enabledelayedexpansion
:a
set/p n=请输入月份
set a1=1
set a2=0
for /l %%i in (1,1,%n%) do (
set /a a3=!a1!+!a2!
set a1=!a2!
set a2=!a3!
echo !a3!)
pause
cls&goto a
作者: huajinghua    时间: 2008-4-11 10:36

素数问题:提示
另一方面,除去1以外,有的数除了1和它本身以外,不能再被别的整数整除,如
  2、3、5、7、11、13、17、...
等,这种数称作素数(也称质数)。有的数除了1和它本身以外,还能被别的整数整除,这种数就叫合数,如
  4、6、8、9、10、12、14、...
等,就是合数。
大家做啊
作者: 随风    时间: 2008-4-11 12:15

【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
      则表明此数不是素数,反之是素数。

:
  1. @echo off&setlocal EnableDelayedExpansion
  2. for /l %%a in (101 1 200) do (
  3.   set /a n=%%a-1&set "flag="
  4.   for /l %%b in (2 1 !n!) do (
  5.     set /a m=%%a%%%%b
  6.      if !m! equ 0 set flag=a
  7.   )
  8.   if not defined flag echo 素数 %%a
  9. )
  10. echo\&pause
复制代码

作者: youxi01    时间: 2008-4-11 12:44     标题: 回复 12楼 的帖子

代码稍做修改,效率稍有提高:
  1. @echo off&setlocal EnableDelayedExpansion
  2. for /l %%a in (101 2 200) do (
  3.   set "flag="
  4.   for /l %%b in (3 2 15) do (
  5.     set /a m=%%a %% %%b
  6.      if !m! equ 0 set flag=A
  7.   )
  8.   if not defined flag echo 素数 %%a
  9. )
  10. echo\&pause
复制代码
继续修正1,运行所用时间仅为原来的1/4
继续修正2,运行速率提高为原来的20倍
作者: youxi01    时间: 2008-4-11 13:09     标题: 注意

以上计算方法个人认为适合 求算 10000 以内的素数,对于超大数字,应使用其它计算方法
作者: huajinghua    时间: 2008-4-11 13:36

@echo off&setlocal EnableDelayedExpansion
for /l %%a in (101 2 200) do (
set t=%%a
set "flag="
set /a x=!t!/2
  for /l %%b in (2 1 !x!) do (
    set /a m=%%a %% %%b
     if !m! equ 0 set flag=A
  )
  if not defined flag echo 素数 %%a
)
echo\&pause
其实上面这段代码通用的,就是每个数让他去除小于它开根的数(但批处理不能算出根号,所以把范围在扩大为这个数到一半),youxi01的代码在101-200之内没问题,但换作把范围400时就多出了很多结果,呵呵,但用在101-200之内时就正确,而且运行速度快。上面这段代码就运行速度慢了点,但是没错误

[ 本帖最后由 huajinghua 于 2008-4-11 13:42 编辑 ]
作者: youxi01    时间: 2008-4-11 14:18     标题: 回复 15楼 的帖子

呵呵,换做400时,将第二个for循环中的 15 改成 20 即可!!
作者: huajinghua    时间: 2008-4-11 16:40

继续讨论水仙花数……
作者: 随风    时间: 2008-4-11 17:20

水仙花数
原创作者: 梦想种子
:
  1. @echo off&setlocal enabledelayedexpansion
  2. :: 原创作者: 梦想种子
  3. for /l %%i in (0 1 9) do set /a t%%i=%%i*%%i*%%i
  4. for /l %%i in (1 1 10000) do (
  5.   set "k=00000%%i"
  6.   set a=!k:~-1!
  7.   set b=!k:~-2,1!
  8.   set c=!k:~-3,1!
  9.   set d=!k:~-4,1!
  10.   set e=!k:~-5,1!
  11.   set /a n=t!a!+t!b!+t!c!+t!d!+t!e!
  12.   if "!n!" == "%%i" echo %%i
  13. )
  14. pause
复制代码

作者: youxi01    时间: 2008-4-11 17:25     标题: 求水仙花数

测试代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 水仙花数有:&echo.
  3. for /l %%i in (100 1 999) do (
  4.         set var=%%i
  5.         set/a num1=!var:~0,1!,num2=!var:~1,1!,num3=!var:~2,1!
  6.         set/a var=!num1!*!num1!*!num1!+!num2!*!num2!*!num2!+!num3!*!num3!*!num3!
  7.         if !var! EQU %%i echo %%i
  8.         )
  9. pause>nul
复制代码

作者: youxi01    时间: 2008-4-11 17:29     标题: 回复 18楼 的帖子

呵呵,这句非常不错,避免了重复计算。
for /l %%i in (0 1 9) do set /a t%%i=%%i*%%i*%%i

作者: 随风    时间: 2008-4-11 17:59

【程序23】
题目:打印出如下图案(菱形)
*
***
******
********
******
***
*

:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "ko=                              "
  3. for /l %%i in (1 2 13) do (
  4.   if defined flag (set /a n-=2&set /a c-=1) else set /a n=%%i&set /a c+=1
  5.   call set m=%%ko:~!c!%%
  6.   set /p=!m!<nul
  7.   for /l %%b in (1 1 !n!) do set /p=*<nul
  8.   echo.
  9.   if !n! geq 7 set flag=a
  10. )
  11. echo.&pause
复制代码

作者: 随风    时间: 2008-4-11 18:18

打印杨辉三角
转一个,
原创作者:wudixin96
:
  1. @echo off&setlocal enabledelayedexpansion
  2. :top
  3. ::原创作者:wudixin96
  4. ::  in=行数:
  5. set/a ab=1,var=30,in=10
  6. set str=1
  7. for /l %%i in (1,1,%in%) do (
  8.    set "num="
  9.    set /a num2=0
  10.    for %%a in (!str!) do (
  11.    set /a num2+=1
  12.    if !num2!==1 set "str1="
  13.    set /a num1=%%a+num
  14.    set "str1=!str1! !num1!"
  15.    set num=%%a
  16.    )
  17.    call :lis "!str1:~1!"
  18.    set "str=!str1! 0"
  19. )
  20. pause>nul
  21. exit
  22. :lis
  23. set max=%~1
  24. for /l %%a in (0 1 300) do (
  25.   if not "!max:~%%a,1!"=="" set /a ci+=1
  26. )
  27. set /a ki=var-ci/2
  28. for /l %%a in (1 1 !ki!) do set "kg= !kg!"
  29. echo !kg!!max!
  30. set nam!ab!=!kg!!max!
  31. set /a ab+=1
  32. set ci=0&set "kg="
  33. goto :eof
复制代码

作者: huajinghua    时间: 2008-4-11 18:36     标题: 分解质因数

【程序14】
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
 重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

代码如下
  1. @echo off
  2. set /p a=请输入要分解的数
  3. set /a c=a/2
  4. :a
  5. set /a b=%b%+1
  6. set /a d=%a%/%b%
  7. set /a s=%a%%%%b%
  8. if not "%s%"=="0" (goto a) else (set/p=%b% <nul &set a=%d% &set b=1&goto a)
  9. pause
复制代码

[ 本帖最后由 huajinghua 于 2008-4-11 19:23 编辑 ]
作者: youxi01    时间: 2008-4-11 18:56     标题: 分解质因数

测试代码(里有一bug,不知各位是否测试的出来,目前并不明白bug产生原因)
  1. @echo off&setlocal enabledelayedexpansion
  2. :start
  3. cls
  4. set "str=1"
  5. set /p EN=请输入一个数字:
  6. call :CheckPrime %EN% Prime Remainder
  7. set str=%str% x !OBJ!
  8. if "!str:~-2,1!"=="1" set str=!str:~0,-4!
  9. if not "!str:~-6,1!"=="1" set str=!str:~4!
  10. echo.&echo %EN% = !str!
  11. pause>nul
  12. goto :start
  13. :CheckPrime OBJ Prime Remainder
  14. set /a OBJ=%~1,Remainder=0
  15. set /a var=!OBJ!/2+1,var_=!OBJ! %% 2
  16. if !var_! EQU 0 (
  17. set str=!str! x 2
  18. set/a Prime=2,Remainder=!OBJ!/2
  19. call :CheckPrime !Remainder! Prime Remainder
  20. )
  21. for /l %%i in (3 2 !var!) do (
  22. set /a var_=!OBJ! %% %%i
  23. if !var_! EQU 0 (
  24. set str=!str! x %%i
  25. set/a Prime=%%i,Remainder=!OBJ!/%%i
  26. call :CheckPrime !Remainder! Prime Remainder
  27. )
  28. )
复制代码

作者: 随风    时间: 2008-4-11 19:05     标题: 回复 24楼 的帖子

这么多题,在答题时,把题目一起贴出来好吗?
作者: youxi01    时间: 2008-4-11 19:05     标题: 回复 23楼 的帖子

代码够简洁,不错。
但是碰到大指数肯定会遭遇效率问题,举例:3659
作者: youxi01    时间: 2008-4-11 19:21     标题: 程序16:输入两个正整数m和n,求其最大公约数和最小公倍数。

转一个自己较早前写的代码了:
  1. @echo off
  2. echo.
  3. echo          求两数的最大公约数、最小公倍数
  4. echo ========================================
  5. title 求两数的最大公约数
  6. setlocal enabledelayedexpansion
  7. set /p num1=请输入第一个数字:
  8. set /p num2=请输入第二个数字:
  9. set/a res=%num1%*%num2%
  10. echo ----------------------------------------
  11. echo %num1%和%num2%:&echo.
  12. :test
  13.      set /a temp=%num1% %% %num2%
  14.      if %temp% NEQ 0 (
  15.          set /a num1=!num2!
  16.          set /a num2=!temp!
  17.          goto :test)
  18. set /a res=%res%/%num2%
  19. echo 最小公倍数为:%res% 最大公约数为:%num2%
  20. pause>nul
复制代码

作者: huajinghua    时间: 2008-4-11 19:25     标题: 回复 26楼 的帖子

对哦,呵呵,碰到大的素数时却是运算很慢。
作者: youxi01    时间: 2008-4-11 19:27     标题: 回复 1楼 的帖子

建议将程序问题 和 解决方案按照如下格式罗列:
问题:***

解决方案:***F(***楼)
以便于查阅
作者: huajinghua    时间: 2008-4-11 19:40

已将帖子题目和答案编辑好了!
作者: 小小坏坏    时间: 2008-4-11 19:45     标题: 寻找电脑高手.............

找个电脑高手当师傅,有意的加236788798..............流言啊.............................
作者: huajinghua    时间: 2008-4-11 19:48

【程序21】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.程序分析:采取逆向思维的方法,从后往前推断。
代码:
  1. @echo off&setlocal EnableDelayedExpansion
  2. set a=0
  3. for /l %%i in (1,1,10) do (
  4. set /a a=a*2+1
  5. echo 倒数第%%i天时有!a!个桃子)
  6. pause
复制代码


答案竟然是1023!
这猴子太会吃了吧

[ 本帖最后由 huajinghua 于 2008-4-11 19:51 编辑 ]
作者: huajinghua    时间: 2008-4-11 20:01

【程序25】
题目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加变成了累乘。
代码:
  1. @echo off&setlocal EnableDelayedExpansion
  2. set a=1
  3. set b=0
  4. for /l %%i in (1,1,20) do (
  5. set /a a=!a! * %%i
  6. set /a b=!b!+!a!
  7. )
  8. echo 20的累积为:!b!
  9. pause
复制代码

作者: 随风    时间: 2008-4-11 21:14

【程序30】
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
指定5位数,是不是太容易了,来个可以是任意位数的。
:
  1. @echo off&setlocal EnableDelayedExpansion
  2. set /p nnn=请输入一个数 &cls
  3. set mmm=%nnn%
  4. :loop
  5. set bbb=%mmm:~0,1%%bbb%
  6. set mmm=%mmm:~1%
  7. if not "%mmm%"=="" goto loop
  8. if "%bbb%"=="%nnn%" (echo %nnn% 是回文数) else echo %nnn% 不是回文数
  9. pause
复制代码

作者: huajinghua    时间: 2008-4-11 21:55

【程序80】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只
   猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了
   一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
   问海滩上原来最少有多少个桃子?
和程序80差不多的题目。稍加改动即可
  1. @echo off&setlocal EnableDelayedExpansion
  2. set a=0
  3. for /l %%i in (1,1,5) do (
  4. set /a a=a*5+1
  5. )
  6. echo 最少要!a!只桃子
  7. pause
复制代码

作者: foxJL    时间: 2008-4-11 22:08

第9题
  1. @echo off &setlocal enabledelayedexpansion
  2. for /l %%i in (1,1,8)do (
  3. for /l %%j in (1,1,8) do (
  4. set /a n=%%i+%%j,n=n%%2
  5. if !n! equ 1 (set/p=■<nul) else (set/p=  <nul)
  6. )
  7. echo.
  8. )
  9. pause>nul
复制代码

作者: foxJL    时间: 2008-4-11 22:49

第20题,因为批处理不能处理小数所以得出的结果不精确
  1. @echo off
  2. set n=100
  3. for /l %%i in (1,1,10) do (set /a n/=2,ns+=n)
  4. echo 共经过%ns%米 第10次反弹%n%米
  5. pause>nul
复制代码

作者: huajinghua    时间: 2008-4-12 08:49     标题: 第20题

程序20.
10米高的小球经每次弹跳后高度为原来的一半,经过10此后的高度?

由于批处理不能处理小数,所以我们可以让他变成整数,下面是我突然之间想到的。呵呵

@echo off&setlocal EnableDelayedExpansion
set a=10
for /l %%i in (1,1,10) do (
set /a a=!a!*10
set /a a=!a!/2
)
set b=0000000000!a!
set c=!b:~-10!
echo 经过10次反弹后的高度为:0.!c!米
pause
作者: yharvey    时间: 2008-4-18 16:01

原帖由 huajinghua 于 2008-4-11 21:55 发表
【程序80】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只
   猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了
   一个, ...


解法与题意有点不太对。。
那位高手能给正确答案。。。

[ 本帖最后由 yharvey 于 2008-4-18 16:26 编辑 ]
作者: ieutk    时间: 2008-4-18 18:30

【程序69】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出
   圈子,问最后留下的是原来第几号的那位。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (100 -1 1) do set "kk= %%a !kk!"
  3. :main
  4. set "ie=0"
  5. for %%a in (%kk%) do set /a ie+=1
  6. if %ie% neq 1 call :st
  7. echo %kk%
  8. pause&exit
  9. :st
  10. for %%a in (%kk%) do (
  11.         set /a num+=1
  12.         if !num! equ 3 (
  13.                 set "num=0"
  14.                 set "kk=!kk: %%a =!
  15.             )
  16.     )
  17. goto main
复制代码

[ 本帖最后由 ieutk 于 2008-4-18 18:31 编辑 ]
作者: yharvey    时间: 2008-4-22 18:02

向前辈学习学习。。。
楼上的结果很对。。。
可能结果:3121
猴子拿的:624,499,399,319,255
可能结果:6246
猴子拿的:1249,999,799,639,511
作者: 249524324    时间: 2008-5-1 08:06

晕,不会批处理,不过如果用C语言做的话,我立马就能全部写出来,呵呵
作者: freshlin    时间: 2008-6-27 17:19     标题: 第1题

set var1=!str:%%a =!
能猜到是设置var1为除了%%a以外的值,

但是这个!str:%%a =!具体是怎么用的阿,哪位高手能给解释下
作者: ieutk    时间: 2008-7-5 20:28

原帖由 freshlin 于 2008-6-27 17:19 发表
set var1=!str:%%a =!
能猜到是设置var1为除了%%a以外的值,

但是这个!str:%%a =!具体是怎么用的阿,哪位高手能给解释下






set var1=!str:%%a =!  是把变量str的值中的 %%a和后面的一空格 替换为空,并把替换后的值赋予var1
作者: twlk    时间: 2008-7-13 01:35

我也正困惑这个!str:%%a =!
!~~~!是替换的意思吗
我在别的地方也看到"!"有其他用法
哎!头都大了!能不能系统讲一下  !    的用法啊
作者: mkl    时间: 2008-8-3 20:57     标题: 【程序1】 题 2

@echo off
set u=1 2 3 4
for %%j in (%u%) do for %%h in (%u%) do for %%g in (%u%) do if %%j neq %%h if %%h neq %%g if %%g neq %%j echo %%j%%h%%g
pause

[ 本帖最后由 mkl 于 2008-8-3 22:49 编辑 ]
作者: mkl    时间: 2008-8-8 12:55     标题: 回复 1楼 的帖子

"【程序81】
题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。"
题目中的 “  800*??+9*??+1    ” 后面的 “ +1 ”应该去掉吧?
去掉后这样做:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (10 1 99) do (
  3.    for /l %%b in (10 1 99) do (
  4.       set /a x=9*%%b
  5.       set /a y=8*%%a
  6.       if !y! geq 10 if !y! leq 99 (
  7.          if !x! geq 100 if !x! leq 999 (
  8.             if %%a==%%b (
  9.                set /a k=809*%%a
  10.                set /a l=800*%%a+9*%%a
  11.                if "!k!"=="!l!" (
  12.                   echo "??" 代表的两位数是%%a
  13.                   echo "809*??" 后的结果是!k!
  14.                )
  15.             )
  16.           )
  17.        )
  18.    )
  19. )
  20. pause>nul
复制代码

[ 本帖最后由 mkl 于 2008-8-8 14:30 编辑 ]
作者: beck1321    时间: 2008-8-8 15:22

貌似6楼就出错了。。。。。
作者: mkl    时间: 2008-8-8 18:00     标题: 回复【程序4】

费了好大的功夫,终于做出来了.做什么事还得靠自己
  1. @ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
  2. :KT
  3. SET /P F= 请输入日期,如2008年2月3日 2008-2-3  :
  4. FOR /F "TOKENS=1,2,3 DELIMS=-" %%A IN ("%F%") DO SET K=%%A &SET M=%%B &SET D=%%C
  5. SET G=%K:~-2%
  6. IF "%G%"=="00" (
  7.    SET/A E=%K%/400*400
  8.    IF !E! == %K% GOTO RUN
  9.    IF !E! NEQ %K% GOTO PING
  10. )     
  11. IF "%G%" NEQ "00" (
  12.          SET/A R=%K%/4*4
  13.          IF !R! == %K% GOTO RUN
  14.          IF !R! NEQ %K% GOTO PING
  15. )
  16. :RUN
  17. SET R=4
  18. GOTO H
  19. :PING
  20. SET R=1
  21. GOTO H
  22. :H
  23. GOTO %M%
  24. :1
  25. SET I=0
  26. GOTO Z
  27. :2
  28. SET I=31
  29. GOTO Z
  30. :3
  31. SET I=59
  32. GOTO Z
  33. :4
  34. SET I=90
  35. GOTO Z
  36. :5
  37. SET I=120
  38. GOTO Z
  39. :6
  40. SET I=151
  41. GOTO Z
  42. :7
  43. SET I=181
  44. GOTO Z
  45. :8
  46. SET I=212
  47. GOTO Z
  48. :9
  49. SET I=243
  50. GOTO Z
  51. :10
  52. SET I=273
  53. GOTO Z
  54. :11
  55. SET I=304
  56. GOTO Z
  57. :12
  58. SET I=334
  59. GOTO Z
  60. :Z
  61. IF "%R%" == "1" (
  62. SET/A J=%D%+%I% )
  63. IF "%R%" == "4" (
  64. If "%m%" leq "2" SET /A J=%D%+%I%
  65. IF "%M%" GTR "2" SET /A J=%D%+%I%+1
  66. )
  67. ECHO 你输入的日期是这一年中的第!J!天
  68. GOTO KT
复制代码

作者: mkl    时间: 2008-8-13 17:24

上面的太繁琐,改进后代码如下
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 请输入日期,如2008年8月9日:2008-8-9
  3. set /p p=
  4. for /f "tokens=1,2,3 delims=-" %%i in ("%p%") do set y=%%i &set m=%%j &set d=%%k
  5. set "g= 00+31+28+31+30+31+30+31+31+30+31+30"
  6. set /a s=%m%*3
  7. call set /a j=%%g:~1,%s%%%%d%
  8. set i=%y:~-2%
  9. if "%i%" == "00" (
  10.    set /a k=%y%%%400
  11.    if !k! == 0 (goto run) else goto ping
  12. ) else (
  13. set /a l=%y%%%4
  14.        if !l! == 0 (goto run)else goto ping
  15. )
  16. :run
  17. if %m% leq 2 (set /a j=%j%) else set /a j=!j!+1
  18. :ping
  19. echo 你输入的日期是这一年中的第%j%天
  20. pause&exit
复制代码

作者: jipinshangren    时间: 2008-8-17 18:20

真的都是强人,佩服!我自己也弄点来看!
作者: a794685135    时间: 2008-9-2 17:24

哇卡卡咔 ,终于做出一个了
9*9口诀表
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1 1 9) do (set b=
  3.    for /l %%j in (1 1 %%i) do (
  4.    set /a a=%%i*%%j
  5.    set b=!b! %%i*%%j=!a!
  6.    )
  7. echo !b!
  8. )
  9. pause
复制代码

作者: caisewudai    时间: 2008-9-2 19:37     标题: 先来看看答案

我才刚学
就被批处理的优点就给吸引了
这些题目我会一点点研究,直至弄懂.
作者: z_berry    时间: 2008-9-3 13:42

题目好多哦
作者: wxcute    时间: 2008-9-19 19:50

【程序84】
题目:一个偶数总能表示为两个素数之和。
  1. @echo off
  2. if exist ss.txt goto :bb
  3. ::显示100以内素数
  4. set m=2
  5. >ss.txt echo 2
  6. set/a m+=1
  7. >>ss.txt echo 3
  8. :zz
  9. set flag=
  10. set/a m+=2
  11. set/a n=m-1
  12. for /l %%i in (2 1 %n%) do (
  13.  call :sf %%i
  14. )
  15. if not defined flag >>ss.txt echo %m%
  16. if %m% lss 99 goto :zz
  17. :bb
  18. ::显示100以内偶数
  19. for /l %%o in (4 2 100) do call :pd %%o
  20. pause
  21. goto :eof
  22. ::显示偶数成两个素数的和
  23. :pd
  24.  set sflag=
  25.  for /f %%m in (ss.txt) do (
  26.   for /f %%n in (ss.txt) do (
  27.  call :bj %%m %%n he %1
  28.  if defined sflag goto :show
  29.   )
  30.  )
  31. :show
  32.  echo %1=%xx%+%yy%
  33.  goto :eof
  34. :sf
  35.  set/a x=m%%%1
  36.  if %x%==0 set flag=1
  37.  goto :eof
  38. :bj
  39.  set/a xx=%1
  40.  set/a yy=%2
  41.  set/a %3=%1+%2
  42.  if %he% equ %4 set sflag=1
复制代码

作者: yslyxqysl    时间: 2008-10-3 18:16     标题: 程序81

  1. @echo off
  2. set /a a=99/8
  3. echo a是%a%
  4. set /a b=809*%a%
  5. echo b是%b%
  6. pause>nul
复制代码

[ 本帖最后由 yslyxqysl 于 2008-10-4 10:08 编辑 ]
作者: zqy    时间: 2008-10-26 09:46

太多了,我一题一题做啊
我的方法可能太土了,但是没办法啊..
  1. @echo off
  2. for /l %%a in (1 1 4) do (
  3. for /l %%b in (1 1 4) do (
  4. for /l %%c in (1 1 4) do (
  5. if %%a neq %%b (
  6. if %%b neq %%c (
  7. if %%a neq %%c echo %%a%%b%%c 2>nul
  8. )
  9. )
  10. )
  11. )
  12. )
  13. pause>nul
复制代码

作者: dglsy    时间: 2008-11-12 14:20

真是高手啊。&&&&&&&&&&&&&&&&&&&
@@@@@@@@@@@@@@@@@@@@@
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
作者: nomyself    时间: 2008-12-5 19:36

83题,有空多写些。

算法效率比较低。
  1. ::输出0-7组成的大于500的奇数个数
  2. ::code by nomyself
  3. ::05/12/2008
  4. @echo off
  5. rem 初值为1
  6. set sum=0
  7. set n=1
  8. goto set
  9. :set
  10. rem 将值赋予临时变量k并转入判断是输出还是续循环
  11. set k=%n%
  12. goto flag
  13. :flag
  14. rem k大于0就继续循环,否则就转入输出
  15. if %k% GTR 0 (call goto while) else goto printf
  16. :while
  17. rem  将j的值与7比较,小于7就设flag为1并重置循环数k;大于7就增加n的值
  18. set /a j=%k%%%10
  19. if %j% LEQ 7 (call goto setwhile) else goto add
  20. :setwhile
  21. set flag=1 & set /a k/=10
  22. goto flag
  23. :printf
  24. if %flag%==1 set /a sum+=1
  25. :add
  26. ::n自增2并且n大于500就输出总数
  27. set /a n+=2
  28. if %n% GTR 500 goto end
  29. goto set
  30. :end
  31. echo 满足条件的值的总数为:%sum%
  32. pause
复制代码

作者: p05401144    时间: 2009-1-12 20:49

99乘法表 搞了好长的时间
@echo off
setlocal enabledelayedexpansion
for /l %%a in (1 1 9) do (for /l %%b in (1 1 %%a) do (set/a res=%%a*%%b&echo %%a*%%b=!res!))
pause
作者: p05401144    时间: 2009-1-12 22:20     标题: 回复 6楼 的帖子

6楼的程序视乎有错误,运行结果是:
‘ate2Day’不是内部或外部命令,是不可运行的程序或批处理文件
作者: taojunyi    时间: 2009-1-23 13:49     标题: 有1、2、3、4个数字,能组成多少个互不相同

::有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
@echo off
setlocal enabledelayedexpansion
set "str=1 2 3 4"
for %%i in (!str!) do (
   set "var1=!str:%%i=!"
   for %%j in (!var1!) do (
     set "var2=!var1:%%j=!"
     for %%k in (!var2!) do (
         set /a b=!b!+1
        set /p =%%i%%j%%k  <nul  
)   
)
)
echo  总共有!b!种无重复数字的三位数
pause>nul
作者: taojunyi    时间: 2009-1-23 14:34     标题: 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三

::有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1 1 4) do (
   for /l %%j in (1 1 4)  do (
     if  %%i neq %%j (
       for /l %%k in (1 1 4) do (
         if  %%k neq %%i (
           if %%k neq %%j (
            echo %%i%%j%%k
            set /a b=!b!+1
           )
         )  
       )
     )
   )
)
echo 总数为!b!个
pause
作者: taojunyi    时间: 2009-1-23 14:42     标题: 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位

::有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
:echo off
setlocal enabledelayedexpansion
for /l %%i in (1 1 4) do (
   for /l %%j in (1 1 4)  do (
      for /l %%k in (1 1 4) do (
         if %%i neq %%j (
           if %%k neq %%i (
             if %%k neq %%j (
               echo %%i%%j%%k
               set /a b=!b!+1
             )
           )  
         )
      )
   )
)
echo 总数为!b!个
pause
作者: irresolute    时间: 2009-2-20 15:30     标题: 晚上我也做做

晚上我也做做
作者: taojunyi    时间: 2009-2-22 18:48     标题: 第一题

  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.    set dd=%%i%%j%%k
  7.    if %%i neq %%j if %%j neq %%k if %%i neq %%k set /a n+=1 &echo !dd!
  8. )))
  9. echo 总共!n!个
  10. pause>nul
复制代码

作者: taojunyi    时间: 2009-2-22 18:56     标题: 第一题

  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.    set /a dd=%%i%%j%%k
  7.    if "!dd:~0,1!" neq "!dd:~1,1!" if "!dd:~0,1!" neq "!dd:~2,1!" if "!
  8. dd:~2,1!" neq "!dd:~1,1!" set /a n+=1 &echo !dd!
  9. )))
  10. echo 总共!n!个
  11. pause>nul
复制代码

作者: irresolute    时间: 2009-2-22 19:00     标题: 程序1

【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
      掉不满足条件的排列。
  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.      set /a dd=%%i%%j%%k
  7.      if %%i neq %%j (
  8.         if %%i neq %%k (
  9.            if %%j neq %%k set /a n+=1 &echo !dd!))
  10. )))
  11. echo 总共!n!个
  12. pause>nul
复制代码

[ 本帖最后由 irresolute 于 2009-2-22 22:46 编辑 ]
作者: irresolute    时间: 2009-2-22 22:12     标题: 判断101-200之间有多少个素数,并输出所有素数。

【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
      则表明此数不是素数,反之是素数。


  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (101,2 200) do (
  4.   set tag=
  5.   set /a c=%%i/2
  6.   for /l %%j in (2,1,!c!) do (
  7.     set /a b=%%i %% %%j
  8.     if !b!==0 set tag=1)
  9.   if not defined tag echo %%i &set /a n+=1
  10. )
  11. echo 共!n!个素数
  12. pause>nul
复制代码

[ 本帖最后由 irresolute 于 2009-2-22 22:37 编辑 ]
作者: irresolute    时间: 2009-2-22 22:27     标题: 问每个月的兔子总数为多少?

【程序11】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
   后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
  1. :main
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. set /a a=1
  5. set /a b=1
  6. set /p n=请输入月份
  7. if "!n!" gtr "2" (
  8. for /l %%i in (3,1,!n!) do (
  9. set /a c=!a!+!b!
  10. set /a b=!a!
  11. set /a a=!c!)) else ( set /a c=1)
  12. echo !c!
  13. goto :main
  14. pause>nul
复制代码

[ 本帖最后由 irresolute 于 2009-2-22 22:37 编辑 ]
作者: irresolute    时间: 2009-2-24 14:40     标题: 分解质因素(14题)

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p n=请输入一个整数
  4. set /a k=2
  5. for /l %%i in (2,1,%n%) do (
  6.    set /a d=!n!%%!k!
  7.    if !d!==0 (
  8.     echo !k!
  9.     set /a n=!n!/!k!
  10.    ) else (
  11.     set /a k=!k!+1
  12.     if !n!==!k! echo !k! & call :ex   
  13. )
  14. )
  15. goto :eof
  16. :ex
  17. pause>nul
复制代码

作者: irresolute    时间: 2009-2-24 16:57     标题: 求其最大公约数和最小公倍数。(解法一)

【程序16】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
::作者提示:资料中未说明何为辗除法。根据C源码可知,辗除法(若a>b,让数a对数b求模得到c,再让数b对数c求模,得到d,再让c对d求模,一直循环直到最后的求模余数n=0)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p p1=请输入整数
  4. set /p p2=请输入另一个整数
  5. set /a a=p1
  6. set /a b=p2
  7. :be
  8. set /a c=!a! %% !b!
  9. set /a a=!b!
  10. set /a b=!c!
  11. if !c! neq 0 (goto :be) else echo !a!是最大公约数
  12. pause>nul
  13. echo 求最大公倍数
  14. set /a max=%p1%*%p2%/!a!
  15. echo %max%是最大公倍数
  16. pause>nul
复制代码

作者: irresolute    时间: 2009-2-24 16:58     标题: 求其最大公约数和最小公倍数。(解法二)

【程序16】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法。
::作者提示:资料中未说明何为辗除法。根据C源码可知,辗除法(若a>b,让数a对数b求模得到c,再让数b对数c求模,得到d,再让c对d求模,一直循环直到最后的求模余数n=0)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p a=请输入一个整数
  4. set /p b=请输入另一个整数
  5. for /l %%i in (%a%,-1,1) do (
  6. set /a a1=!a!%%%%i
  7. set /a a2=!b!%%%%i
  8. if !a1!==0 if !a2!==0 set c=%%i&echo %%i& goto :t1
  9. )
  10. :t1
  11. pause>nul
  12. set /a cc=!a!*!b!/!c!
  13. echo !cc!
  14. pause>nul
复制代码

作者: irresolute    时间: 2009-2-24 19:57     标题: 正整数分解质因数(解法2)

【程序14】
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p n=请输入整数
  4. set /p=%n%=<nul
  5. set /a k=2
  6. :main
  7. if !k!==%n% set /p=!k!<nul & goto :ex
  8. set /a c=!n! %% !k!
  9. if !c!==0 (
  10. set /p=!k!*<nul
  11. set /a n=!n!/!k!
  12. ) else (
  13. set /a k+=1
  14. )
  15. goto :main
  16. :ex
  17. pause>nul
复制代码

作者: irresolute    时间: 2009-2-24 20:53     标题: 【程序19】

【程序19】
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (1,1,1000) do (
  4. set /a k=%%i
  5. set /a n=!k!/2
  6. set /a s=0
  7. for /l %%j in (1,1,!n!) do (
  8.    set /a kk=!k! %% %%j
  9.    if !kk!==0  set /a s+=%%j
  10. )
  11. if !s!==!k! echo !k!
  12. )
  13. pause>nul
复制代码

作者: irresolute    时间: 2009-2-24 21:42     标题: 【程序21】

【程序21】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a a=1
  4. for /l %%i in (1,1,9) do (
  5. set /a b=2*!a!+2
  6. set /a a=!b!
  7. )
  8. echo 第一天摘的桃子数是 !a!
  9. pause>nul
复制代码

作者: irresolute    时间: 2009-2-24 21:51     标题: 【程序23】

【程序23】
题目:打印出如下图案(菱形)
*
***
******
********
******
***
*
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (1,2,7) do (
  4. set /a n=%%i
  5. for /l %%j in (1,1,!n!) do (
  6.    set /p=*<nul
  7.   )
  8. echo.
  9. )
  10. for /l %%i in (5,-2,1) do (
  11. set /a n=%%i
  12. for /l %%j in (1,1,!n!) do (
  13.    set /p=*<nul
  14.   )
  15. echo.
  16. )
  17. pause>nul
复制代码

作者: irresolute    时间: 2009-2-24 22:10     标题: 【程序25】

【程序25】
题目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加变成了累乘。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a s=0
  4. for /l %%i in (1,1,20) do (
  5. set /a k=%%i
  6. set /a s1=1
  7. for /l %%j in (1,1,!k!) do (
  8.    set /a s1*=%%j
  9. )
  10. set /a s+=!s1!
  11. )
  12. echo !s!&pause>nul
复制代码

作者: irresolute    时间: 2009-2-25 08:32     标题: 程序30 判断回文

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :main
  4. set a=
  5. set /p a=请输入一个五位数
  6. if "!a:~0,1!"=="!a:~4,1!" (
  7. if "!a:~1,1!"=="!a:~3,1!"  (echo !a!是回文) else echo !a!不是回文
  8. ) else (
  9. echo !a!不是回文
  10. )
  11. pause>nul
  12. goto :main
复制代码

[ 本帖最后由 irresolute 于 2009-2-25 13:40 编辑 ]
作者: irresolute    时间: 2009-2-25 16:29     标题: 【程序28】 (这题费了劲的,若对要给偶加分)

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第
   3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后
   问第一个人,他说是10岁。请问第五个人多大?
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道
      第四人的岁数,依次类推,推到第一人(10岁),再往回推。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a n=5
  4. set  b=
  5. call :loop 5
  6. echo 第五个人!b!岁
  7. pause>nul
  8. goto :eof
  9. :loop
  10. set /a n=%1
  11. set /a n-=1
  12. if !n!==0 (set /a b=10 & goto :eof) else (
  13. call :loop !n!
  14. set /a b+=2
  15. )
复制代码

[ 本帖最后由 irresolute 于 2009-2-25 16:34 编辑 ]
作者: sjzong    时间: 2009-3-28 14:22     标题: 求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 编辑 ]
作者: sjzong    时间: 2009-3-29 01:46     标题: 题目:对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 编辑 ]
作者: a5417871    时间: 2009-3-31 01:09

这是新手做的吗··555555555我刚学。你们编写的那些我还要慢慢去理解每一句。每一符号的含义。
先收藏起来。慢慢的分析
作者: sjzong    时间: 2009-4-3 12:39     标题: 打印杨辉三角

  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
复制代码

作者: sjzong    时间: 2009-4-5 14:27     标题: 纠错了!!【程序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 编辑 ]
作者: sjzong    时间: 2009-4-5 14:40     标题: 纠错了!【程序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 编辑 ]
作者: sjzong    时间: 2009-4-7 00:34     标题: 【程序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 编辑 ]
作者: sjzong    时间: 2009-4-7 00:35     标题: 【程序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 编辑 ]
作者: sjzong    时间: 2009-4-7 00:55     标题: 【程序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 编辑 ]
作者: tyc    时间: 2009-4-7 08:38     标题: try

  1. ::题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. set /a b=1,a=2
  5. set s=
  6. for /l %%i in (1,1,20) do (
  7. set /a c=b+a
  8. echo !a!/!b!
  9. set /a s=s+!a!/!b!
  10. set /a b=a
  11. set /a a=c
  12. )
  13. echo %s%
  14. pause>nul
复制代码
注:由于限制未能求出小数部分!
作者: tyc    时间: 2009-4-7 10:38     标题: 选择排序法

  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
复制代码

作者: sjzong    时间: 2009-4-9 00:45     标题: 【程序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 编辑 ]
作者: sjzong    时间: 2009-4-10 09:57     标题: 【程序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 编辑 ]
作者: tyc    时间: 2009-4-10 10:30     标题: 八进制转十进制

  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 编辑 ]
作者: tyc    时间: 2009-4-12 11:54     标题: 十进制转任意进制

  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 编辑 ]
作者: apchyo11    时间: 2009-5-3 17:45

精华啊。。 我很是喜欢!!
作者: bath    时间: 2009-5-28 19:01

好了,我承认,你们都是神!
一个菜鸟瞠目结舌,蹚乎其后
作者: tianzhizhouyin    时间: 2009-6-25 18:46

看到我都快头晕了,不过很好很强大。
作者: sjzong    时间: 2009-6-28 23:22     标题: 回复 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
复制代码

作者: sxqylz    时间: 2009-7-22 19:29

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




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2