标题: 从C语言的题目中挑出来的题目给批处理新手做 [打印本页]
作者: huajinghua 时间: 2008-4-10 19:24 标题: 从C语言的题目中挑出来的题目给批处理新手做
申请加精!
本人从《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 标题: 求数字不同的排列组合
论坛里前几天就出现了相关代码,测试代码:- @echo off &setlocal enabledelayedexpansion
- set "str=1 2 3 4 "
- for %%a in (%str%) do (
- set var1=!str:%%a =!
- for %%b in (!var1!) do (
- set var2=!var1:%%b =!
- for %%c in (!var2!) do (
- echo %%a%%b%%c
- )
- )
-
- )
-
- pause>nul
复制代码
作者: youxi01 时间: 2008-4-10 23:43 标题: 求某日期在一年中是第几天
测试代码:- @echo off &setlocal enabledelayedexpansion
- set /p Cdate=请输入日期(如:2008-1-2日或2008/01/02):
- for /f "tokens=1-3 delims=/-, " %%a in ("%Cdate%") do (
- set/a yy=%%a,mm=100%%b%%100,dd=100%%c%%100
- )
- call ate2Day %yy%-1-1 days1
- call ate2Day %Cdate% days2
- set/a res=days2-days1+1
- echo.&echo %yy%年%mm%月%dd%日 是 %yy%年 的第 %res% 天。
- pause>nul
- goto :eof
- ::注意:以下"函数"由willsort完成(略有改动);
- ate2Day 日期 传回(数值)结果
- setlocal ENABLEEXTENSIONS
- for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (
- set yy=%%a & set mm=%%b & set dd=%%c
- )
- set /a dd=100%dd%%%100,mm=100%mm%%%100
- set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
- set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
- endlocal&set %2=%j%&goto :EOF
- ay2Date 数值 传回(日期)结果
- setlocal ENABLEEXTENSIONS
- set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
- 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
- set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
- (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
- endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF
复制代码
作者: youxi01 时间: 2008-4-10 23:53 标题: 打印99乘法表
此题namejm已经做了,测试代码:- @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
- set "res=!res! " %======此处用来对齐=========%
- set/p=%%ax%%b=!res:~0,2! <nul
- )
- echo.
- )
- 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(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
:- @echo off&setlocal EnableDelayedExpansion
- for /l %%a in (101 1 200) do (
- set /a n=%%a-1&set "flag="
- for /l %%b in (2 1 !n!) do (
- set /a m=%%a%%%%b
- if !m! equ 0 set flag=a
- )
- if not defined flag echo 素数 %%a
- )
- echo\&pause
复制代码
作者: youxi01 时间: 2008-4-11 12:44 标题: 回复 12楼 的帖子
代码稍做修改,效率稍有提高:-
- @echo off&setlocal EnableDelayedExpansion
- for /l %%a in (101 2 200) do (
- set "flag="
- for /l %%b in (3 2 15) do (
- set /a m=%%a %% %%b
- if !m! equ 0 set flag=A
- )
- if not defined flag echo 素数 %%a
- )
- 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
水仙花数
原创作者: 梦想种子
:- @echo off&setlocal enabledelayedexpansion
- :: 原创作者: 梦想种子
- for /l %%i in (0 1 9) do set /a t%%i=%%i*%%i*%%i
- for /l %%i in (1 1 10000) do (
- set "k=00000%%i"
- set a=!k:~-1!
- set b=!k:~-2,1!
- set c=!k:~-3,1!
- set d=!k:~-4,1!
- set e=!k:~-5,1!
- set /a n=t!a!+t!b!+t!c!+t!d!+t!e!
- if "!n!" == "%%i" echo %%i
- )
- pause
复制代码
作者: youxi01 时间: 2008-4-11 17:25 标题: 求水仙花数
测试代码:- @echo off&setlocal enabledelayedexpansion
- echo 水仙花数有:&echo.
- for /l %%i in (100 1 999) do (
- set var=%%i
- set/a num1=!var:~0,1!,num2=!var:~1,1!,num3=!var:~2,1!
- set/a var=!num1!*!num1!*!num1!+!num2!*!num2!*!num2!+!num3!*!num3!*!num3!
- if !var! EQU %%i echo %%i
- )
-
- 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】
题目:打印出如下图案(菱形)
*
***
******
********
******
***
*
:- @echo off&setlocal enabledelayedexpansion
- set "ko= "
- for /l %%i in (1 2 13) do (
- if defined flag (set /a n-=2&set /a c-=1) else set /a n=%%i&set /a c+=1
- call set m=%%ko:~!c!%%
- set /p=!m!<nul
- for /l %%b in (1 1 !n!) do set /p=*<nul
- echo.
- if !n! geq 7 set flag=a
- )
- echo.&pause
复制代码
作者: 随风 时间: 2008-4-11 18:18
打印杨辉三角
转一个,
原创作者:wudixin96
:- @echo off&setlocal enabledelayedexpansion
- :top
- ::原创作者:wudixin96
- :: in=行数:
- set/a ab=1,var=30,in=10
- set str=1
- for /l %%i in (1,1,%in%) do (
- set "num="
- set /a num2=0
- for %%a in (!str!) do (
- set /a num2+=1
- if !num2!==1 set "str1="
- set /a num1=%%a+num
- set "str1=!str1! !num1!"
- set num=%%a
- )
- call :lis "!str1:~1!"
- set "str=!str1! 0"
- )
- pause>nul
- exit
- :lis
- set max=%~1
- for /l %%a in (0 1 300) do (
- if not "!max:~%%a,1!"=="" set /a ci+=1
- )
- set /a ki=var-ci/2
- for /l %%a in (1 1 !ki!) do set "kg= !kg!"
- echo !kg!!max!
- set nam!ab!=!kg!!max!
- set /a ab+=1
- set ci=0&set "kg="
- 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的值,重复执行第一步。
代码如下- @echo off
- set /p a=请输入要分解的数
- set /a c=a/2
- :a
- set /a b=%b%+1
- set /a d=%a%/%b%
- set /a s=%a%%%%b%
- if not "%s%"=="0" (goto a) else (set/p=%b% <nul &set a=%d% &set b=1&goto a)
- pause
复制代码
[ 本帖最后由 huajinghua 于 2008-4-11 19:23 编辑 ]
作者: youxi01 时间: 2008-4-11 18:56 标题: 分解质因数
测试代码(里有一bug,不知各位是否测试的出来,目前并不明白bug产生原因)- @echo off&setlocal enabledelayedexpansion
- :start
- cls
- set "str=1"
- set /p EN=请输入一个数字:
- call :CheckPrime %EN% Prime Remainder
- set str=%str% x !OBJ!
-
- if "!str:~-2,1!"=="1" set str=!str:~0,-4!
- if not "!str:~-6,1!"=="1" set str=!str:~4!
-
- echo.&echo %EN% = !str!
- pause>nul
- goto :start
-
- :CheckPrime OBJ Prime Remainder
- set /a OBJ=%~1,Remainder=0
- set /a var=!OBJ!/2+1,var_=!OBJ! %% 2
- if !var_! EQU 0 (
- set str=!str! x 2
- set/a Prime=2,Remainder=!OBJ!/2
- call :CheckPrime !Remainder! Prime Remainder
- )
- for /l %%i in (3 2 !var!) do (
- set /a var_=!OBJ! %% %%i
- if !var_! EQU 0 (
- set str=!str! x %%i
- set/a Prime=%%i,Remainder=!OBJ!/%%i
- call :CheckPrime !Remainder! Prime Remainder
- )
- )
复制代码
作者: 随风 时间: 2008-4-11 19:05 标题: 回复 24楼 的帖子
这么多题,在答题时,把题目一起贴出来好吗?
作者: youxi01 时间: 2008-4-11 19:05 标题: 回复 23楼 的帖子
代码够简洁,不错。
但是碰到大指数肯定会遭遇效率问题,举例:3659
作者: youxi01 时间: 2008-4-11 19:21 标题: 程序16:输入两个正整数m和n,求其最大公约数和最小公倍数。
转一个自己较早前写的代码了:- @echo off
- echo.
- echo 求两数的最大公约数、最小公倍数
- echo ========================================
- title 求两数的最大公约数
- setlocal enabledelayedexpansion
- set /p num1=请输入第一个数字:
- set /p num2=请输入第二个数字:
- set/a res=%num1%*%num2%
- echo ----------------------------------------
- echo %num1%和%num2%:&echo.
- :test
- set /a temp=%num1% %% %num2%
- if %temp% NEQ 0 (
- set /a num1=!num2!
- set /a num2=!temp!
- goto :test)
-
- set /a res=%res%/%num2%
- echo 最小公倍数为:%res% 最大公约数为:%num2%
- 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.程序分析:采取逆向思维的方法,从后往前推断。
代码:- @echo off&setlocal EnableDelayedExpansion
- set a=0
- for /l %%i in (1,1,10) do (
- set /a a=a*2+1
- echo 倒数第%%i天时有!a!个桃子)
- pause
复制代码
答案竟然是1023!
这猴子太会吃了吧
[ 本帖最后由 huajinghua 于 2008-4-11 19:51 编辑 ]
作者: huajinghua 时间: 2008-4-11 20:01
【程序25】
题目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加变成了累乘。
代码:- @echo off&setlocal EnableDelayedExpansion
- set a=1
- set b=0
- for /l %%i in (1,1,20) do (
- set /a a=!a! * %%i
- set /a b=!b!+!a!
- )
- echo 20的累积为:!b!
- pause
复制代码
作者: 随风 时间: 2008-4-11 21:14
【程序30】
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
指定5位数,是不是太容易了,来个可以是任意位数的。
:- @echo off&setlocal EnableDelayedExpansion
- set /p nnn=请输入一个数 &cls
- set mmm=%nnn%
- :loop
- set bbb=%mmm:~0,1%%bbb%
- set mmm=%mmm:~1%
- if not "%mmm%"=="" goto loop
- if "%bbb%"=="%nnn%" (echo %nnn% 是回文数) else echo %nnn% 不是回文数
- pause
复制代码
作者: huajinghua 时间: 2008-4-11 21:55
【程序80】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只
猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了
一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
问海滩上原来最少有多少个桃子?
和程序80差不多的题目。稍加改动即可- @echo off&setlocal EnableDelayedExpansion
- set a=0
- for /l %%i in (1,1,5) do (
- set /a a=a*5+1
- )
- echo 最少要!a!只桃子
- pause
复制代码
作者: foxJL 时间: 2008-4-11 22:08
第9题- @echo off &setlocal enabledelayedexpansion
- for /l %%i in (1,1,8)do (
- for /l %%j in (1,1,8) do (
- set /a n=%%i+%%j,n=n%%2
- if !n! equ 1 (set/p=■<nul) else (set/p= <nul)
- )
- echo.
- )
- pause>nul
复制代码
作者: foxJL 时间: 2008-4-11 22:49
第20题,因为批处理不能处理小数所以得出的结果不精确- @echo off
- set n=100
- for /l %%i in (1,1,10) do (set /a n/=2,ns+=n)
- echo 共经过%ns%米 第10次反弹%n%米
- 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的人退出
圈子,问最后留下的是原来第几号的那位。- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (100 -1 1) do set "kk= %%a !kk!"
- :main
- set "ie=0"
- for %%a in (%kk%) do set /a ie+=1
- if %ie% neq 1 call :st
- echo %kk%
- pause&exit
- :st
- for %%a in (%kk%) do (
- set /a num+=1
- if !num! equ 3 (
- set "num=0"
- set "kk=!kk: %%a =!
- )
- )
- 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 ”应该去掉吧?
去掉后这样做:- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (10 1 99) do (
- for /l %%b in (10 1 99) do (
- set /a x=9*%%b
- set /a y=8*%%a
- if !y! geq 10 if !y! leq 99 (
- if !x! geq 100 if !x! leq 999 (
- if %%a==%%b (
- set /a k=809*%%a
- set /a l=800*%%a+9*%%a
- if "!k!"=="!l!" (
- echo "??" 代表的两位数是%%a
- echo "809*??" 后的结果是!k!
- )
- )
- )
- )
- )
- )
- pause>nul
复制代码
[ 本帖最后由 mkl 于 2008-8-8 14:30 编辑 ]
作者: beck1321 时间: 2008-8-8 15:22
貌似6楼就出错了。。。。。
作者: mkl 时间: 2008-8-8 18:00 标题: 回复【程序4】
费了好大的功夫,终于做出来了.做什么事还得靠自己- @ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
- :KT
- SET /P F= 请输入日期,如2008年2月3日 2008-2-3 :
- FOR /F "TOKENS=1,2,3 DELIMS=-" %%A IN ("%F%") DO SET K=%%A &SET M=%%B &SET D=%%C
- SET G=%K:~-2%
- IF "%G%"=="00" (
- SET/A E=%K%/400*400
- IF !E! == %K% GOTO RUN
- IF !E! NEQ %K% GOTO PING
- )
- IF "%G%" NEQ "00" (
- SET/A R=%K%/4*4
- IF !R! == %K% GOTO RUN
- IF !R! NEQ %K% GOTO PING
- )
- :RUN
- SET R=4
- GOTO H
- :PING
- SET R=1
- GOTO H
- :H
- GOTO %M%
- :1
- SET I=0
- GOTO Z
- :2
- SET I=31
- GOTO Z
- :3
- SET I=59
- GOTO Z
- :4
- SET I=90
- GOTO Z
- :5
- SET I=120
- GOTO Z
- :6
- SET I=151
- GOTO Z
- :7
- SET I=181
- GOTO Z
- :8
- SET I=212
- GOTO Z
- :9
- SET I=243
- GOTO Z
- :10
- SET I=273
- GOTO Z
- :11
- SET I=304
- GOTO Z
- :12
- SET I=334
- GOTO Z
- :Z
- IF "%R%" == "1" (
- SET/A J=%D%+%I% )
- IF "%R%" == "4" (
- If "%m%" leq "2" SET /A J=%D%+%I%
- IF "%M%" GTR "2" SET /A J=%D%+%I%+1
- )
- ECHO 你输入的日期是这一年中的第!J!天
- GOTO KT
复制代码
作者: mkl 时间: 2008-8-13 17:24
上面的太繁琐,改进后代码如下- @echo off&setlocal enabledelayedexpansion
- echo 请输入日期,如2008年8月9日:2008-8-9
- set /p p=
- for /f "tokens=1,2,3 delims=-" %%i in ("%p%") do set y=%%i &set m=%%j &set d=%%k
- set "g= 00+31+28+31+30+31+30+31+31+30+31+30"
- set /a s=%m%*3
- call set /a j=%%g:~1,%s%%%%d%
- set i=%y:~-2%
- if "%i%" == "00" (
- set /a k=%y%%%400
- if !k! == 0 (goto run) else goto ping
- ) else (
- set /a l=%y%%%4
- if !l! == 0 (goto run)else goto ping
- )
- :run
- if %m% leq 2 (set /a j=%j%) else set /a j=!j!+1
- :ping
- echo 你输入的日期是这一年中的第%j%天
- pause&exit
复制代码
作者: jipinshangren 时间: 2008-8-17 18:20
真的都是强人,佩服!我自己也弄点来看!
作者: a794685135 时间: 2008-9-2 17:24
哇卡卡咔 ,终于做出一个了
9*9口诀表- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1 1 9) do (set b=
- for /l %%j in (1 1 %%i) do (
- set /a a=%%i*%%j
- set b=!b! %%i*%%j=!a!
- )
- echo !b!
- )
- pause
复制代码
作者: caisewudai 时间: 2008-9-2 19:37 标题: 先来看看答案
我才刚学
就被批处理的优点就给吸引了
这些题目我会一点点研究,直至弄懂.
作者: z_berry 时间: 2008-9-3 13:42
题目好多哦
作者: wxcute 时间: 2008-9-19 19:50
【程序84】
题目:一个偶数总能表示为两个素数之和。- @echo off
- if exist ss.txt goto :bb
-
- ::显示100以内素数
- set m=2
- >ss.txt echo 2
- set/a m+=1
- >>ss.txt echo 3
-
- :zz
- set flag=
- set/a m+=2
- set/a n=m-1
- for /l %%i in (2 1 %n%) do (
- call :sf %%i
- )
- if not defined flag >>ss.txt echo %m%
- if %m% lss 99 goto :zz
-
- :bb
- ::显示100以内偶数
- for /l %%o in (4 2 100) do call :pd %%o
- pause
- goto :eof
-
- ::显示偶数成两个素数的和
- :pd
- set sflag=
- for /f %%m in (ss.txt) do (
- for /f %%n in (ss.txt) do (
- call :bj %%m %%n he %1
- if defined sflag goto :show
- )
- )
- :show
- echo %1=%xx%+%yy%
- goto :eof
- :sf
- set/a x=m%%%1
- if %x%==0 set flag=1
- goto :eof
- :bj
- set/a xx=%1
- set/a yy=%2
- set/a %3=%1+%2
- if %he% equ %4 set sflag=1
复制代码
作者: yslyxqysl 时间: 2008-10-3 18:16 标题: 程序81
-
- @echo off
- set /a a=99/8
- echo a是%a%
- set /a b=809*%a%
- echo b是%b%
- pause>nul
复制代码
[ 本帖最后由 yslyxqysl 于 2008-10-4 10:08 编辑 ]
作者: zqy 时间: 2008-10-26 09:46
太多了,我一题一题做啊
我的方法可能太土了,但是没办法啊..- @echo off
- for /l %%a in (1 1 4) do (
- for /l %%b in (1 1 4) do (
- for /l %%c in (1 1 4) do (
- if %%a neq %%b (
- if %%b neq %%c (
- if %%a neq %%c echo %%a%%b%%c 2>nul
- )
- )
- )
- )
- )
- pause>nul
复制代码
作者: dglsy 时间: 2008-11-12 14:20
真是高手啊。&&&&&&&&&&&&&&&&&&&
@@@@@@@@@@@@@@@@@@@@@
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
作者: nomyself 时间: 2008-12-5 19:36
83题,有空多写些。
算法效率比较低。- ::输出0-7组成的大于500的奇数个数
- ::code by nomyself
- ::05/12/2008
- @echo off
- rem 初值为1
- set sum=0
- set n=1
- goto set
- :set
- rem 将值赋予临时变量k并转入判断是输出还是续循环
- set k=%n%
- goto flag
- :flag
- rem k大于0就继续循环,否则就转入输出
- if %k% GTR 0 (call goto while) else goto printf
- :while
- rem 将j的值与7比较,小于7就设flag为1并重置循环数k;大于7就增加n的值
- set /a j=%k%%%10
- if %j% LEQ 7 (call goto setwhile) else goto add
- :setwhile
- set flag=1 & set /a k/=10
- goto flag
- :printf
- if %flag%==1 set /a sum+=1
- :add
- ::n自增2并且n大于500就输出总数
- set /a n+=2
- if %n% GTR 500 goto end
- goto set
- :end
- echo 满足条件的值的总数为:%sum%
- 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 标题: 第一题
- @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 (
- set dd=%%i%%j%%k
- if %%i neq %%j if %%j neq %%k if %%i neq %%k set /a n+=1 &echo !dd!
- )))
- echo 总共!n!个
- pause>nul
复制代码
作者: taojunyi 时间: 2009-2-22 18:56 标题: 第一题
- @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 (
- set /a dd=%%i%%j%%k
- if "!dd:~0,1!" neq "!dd:~1,1!" if "!dd:~0,1!" neq "!dd:~2,1!" if "!
-
- dd:~2,1!" neq "!dd:~1,1!" set /a n+=1 &echo !dd!
- )))
- echo 总共!n!个
- pause>nul
复制代码
作者: irresolute 时间: 2009-2-22 19:00 标题: 程序1
【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是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 (
- set /a dd=%%i%%j%%k
- if %%i neq %%j (
- if %%i neq %%k (
- if %%j neq %%k set /a n+=1 &echo !dd!))
- )))
- echo 总共!n!个
- pause>nul
复制代码
[ 本帖最后由 irresolute 于 2009-2-22 22:46 编辑 ]
作者: irresolute 时间: 2009-2-22 22:12 标题: 判断101-200之间有多少个素数,并输出所有素数。
【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
- @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (101,2 200) do (
- set tag=
- set /a c=%%i/2
- for /l %%j in (2,1,!c!) do (
- set /a b=%%i %% %%j
- if !b!==0 set tag=1)
- if not defined tag echo %%i &set /a n+=1
- )
- echo 共!n!个素数
- 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....
- :main
- @echo off
- setlocal enabledelayedexpansion
- set /a a=1
- set /a b=1
- set /p n=请输入月份
- if "!n!" gtr "2" (
- for /l %%i in (3,1,!n!) do (
- set /a c=!a!+!b!
- set /a b=!a!
- set /a a=!c!)) else ( set /a c=1)
- echo !c!
- goto :main
- pause>nul
复制代码
[ 本帖最后由 irresolute 于 2009-2-22 22:37 编辑 ]
作者: irresolute 时间: 2009-2-24 14:40 标题: 分解质因素(14题)
- @echo off
- setlocal enabledelayedexpansion
- set /p n=请输入一个整数
- set /a k=2
- for /l %%i in (2,1,%n%) do (
- set /a d=!n!%%!k!
- if !d!==0 (
- echo !k!
- set /a n=!n!/!k!
- ) else (
- set /a k=!k!+1
- if !n!==!k! echo !k! & call :ex
- )
- )
- goto :eof
- :ex
- 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)- @echo off
- setlocal enabledelayedexpansion
- set /p p1=请输入整数
- set /p p2=请输入另一个整数
- set /a a=p1
- set /a b=p2
- :be
- set /a c=!a! %% !b!
- set /a a=!b!
- set /a b=!c!
- if !c! neq 0 (goto :be) else echo !a!是最大公约数
- pause>nul
- echo 求最大公倍数
- set /a max=%p1%*%p2%/!a!
- echo %max%是最大公倍数
- 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)- @echo off
- setlocal enabledelayedexpansion
- set /p a=请输入一个整数
- set /p b=请输入另一个整数
- for /l %%i in (%a%,-1,1) do (
- set /a a1=!a!%%%%i
- set /a a2=!b!%%%%i
- if !a1!==0 if !a2!==0 set c=%%i&echo %%i& goto :t1
- )
- :t1
- pause>nul
-
- set /a cc=!a!*!b!/!c!
- echo !cc!
- pause>nul
复制代码
作者: irresolute 时间: 2009-2-24 19:57 标题: 正整数分解质因数(解法2)
【程序14】
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:- @echo off
- setlocal enabledelayedexpansion
- set /p n=请输入整数
- set /p=%n%=<nul
- set /a k=2
- :main
- if !k!==%n% set /p=!k!<nul & goto :ex
- set /a c=!n! %% !k!
- if !c!==0 (
- set /p=!k!*<nul
- set /a n=!n!/!k!
- ) else (
- set /a k+=1
- )
- goto :main
- :ex
- pause>nul
复制代码
作者: irresolute 时间: 2009-2-24 20:53 标题: 【程序19】
【程序19】
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数- @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (1,1,1000) do (
- set /a k=%%i
- set /a n=!k!/2
- set /a s=0
- for /l %%j in (1,1,!n!) do (
- set /a kk=!k! %% %%j
- if !kk!==0 set /a s+=%%j
- )
- if !s!==!k! echo !k!
- )
- pause>nul
复制代码
作者: irresolute 时间: 2009-2-24 21:42 标题: 【程序21】
【程序21】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。- @echo off
- setlocal enabledelayedexpansion
- set /a a=1
- for /l %%i in (1,1,9) do (
- set /a b=2*!a!+2
- set /a a=!b!
- )
- echo 第一天摘的桃子数是 !a!
- pause>nul
复制代码
作者: irresolute 时间: 2009-2-24 21:51 标题: 【程序23】
【程序23】
题目:打印出如下图案(菱形)
*
***
******
********
******
***
*- @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (1,2,7) do (
- set /a n=%%i
- for /l %%j in (1,1,!n!) do (
- set /p=*<nul
- )
- echo.
- )
- for /l %%i in (5,-2,1) do (
- set /a n=%%i
- for /l %%j in (1,1,!n!) do (
- set /p=*<nul
- )
- echo.
- )
- pause>nul
复制代码
作者: irresolute 时间: 2009-2-24 22:10 标题: 【程序25】
【程序25】
题目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加变成了累乘。- @echo off
- setlocal enabledelayedexpansion
- set /a s=0
- for /l %%i in (1,1,20) do (
- set /a k=%%i
- set /a s1=1
- for /l %%j in (1,1,!k!) do (
- set /a s1*=%%j
- )
- set /a s+=!s1!
- )
- echo !s!&pause>nul
复制代码
作者: irresolute 时间: 2009-2-25 08:32 标题: 程序30 判断回文
- @echo off
- setlocal enabledelayedexpansion
- :main
- set a=
- set /p a=请输入一个五位数
- if "!a:~0,1!"=="!a:~4,1!" (
- if "!a:~1,1!"=="!a:~3,1!" (echo !a!是回文) else echo !a!不是回文
- ) else (
- echo !a!不是回文
- )
- pause>nul
- 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岁),再往回推。-
- @echo off
- setlocal enabledelayedexpansion
- set /a n=5
- set b=
- call :loop 5
- echo 第五个人!b!岁
- pause>nul
- goto :eof
- :loop
- set /a n=%1
- set /a n-=1
- if !n!==0 (set /a b=10 & goto :eof) else (
- call :loop !n!
- set /a b+=2
- )
复制代码
[ 本帖最后由 irresolute 于 2009-2-25 16:34 编辑 ]
作者: sjzong 时间: 2009-3-28 14:22 标题: 求1、2、3、4个数字组成三位数
- @echo off
- ::有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- ::原创:sjzong
- setlocal enabledelayedexpansion
- set num=0
- 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 %%i neq %%k if %%k neq %%j (echo %%i%%j%%k & set /a num=!num!+1)
- )
- )
- )
- echo !num!
- pause
复制代码
[ 本帖最后由 sjzong 于 2009-4-3 12:40 编辑 ]
作者: sjzong 时间: 2009-3-29 01:46 标题: 题目:对10个数进行排序
- @echo off
- setlocal enabledelayedexpansion
- ::原创:sjzong
- echo 请输入十个数字……
- set str=
- for /l %%a in (1 1 10) do (
- set /p shuzi=请输入%%a个数:
- set str=!str! !shuzi!
- )
- set zimu=ABCDEFGHIJ
- set ss=
- for %%b in (!str!) do (
- set count=0
- for %%c in (!str!) do if %%b geq %%c set /a count=!count!+1
- set /a count=!count!-1
- set ss=!ss! !count!
- )
- for /l %%d in (0 1 9) do (
- set cou=
- for %%e in (!ss!) do if %%d==%%e set /a cou=!cou!+1
- for /l %%f in (1 1 !cou!) do set num=!num! !zimu:~%%d,1!
- )
- for %%i in (!str!) do (
- set count=0
- for %%j in (!str!) do if %%i geq %%j set /a count=!count!+1
- set /a count=!count!-1
- if !count!==0 set num=!num:A=%%i!
- if !count!==1 set num=!num:B=%%i!
- if !count!==2 set num=!num:C=%%i!
- if !count!==3 set num=!num:D=%%i!
- if !count!==4 set num=!num:E=%%i!
- if !count!==5 set num=!num:F=%%i!
- if !count!==6 set num=!num:G=%%i!
- if !count!==7 set num=!num:H=%%i!
- if !count!==8 set num=!num:I=%%i!
- if !count!==9 set num=!num:J=%%i!
- )
- echo 你输入的十个数字是:!str!
- echo 排序后的十个数字是:!num!
- pause
复制代码
[ 本帖最后由 sjzong 于 2009-4-3 12:42 编辑 ]
作者: a5417871 时间: 2009-3-31 01:09
这是新手做的吗··555555555我刚学。你们编写的那些我还要慢慢去理解每一句。每一符号的含义。
先收藏起来。慢慢的分析
作者: sjzong 时间: 2009-4-3 12:39 标题: 打印杨辉三角
- @echo off
- ::打印杨辉三角
- ::原创:sjzong
- setlocal enabledelayedexpansion
- set str= 1
- echo !str!
- for /l %%a in (1 1 9) do (
- ::求出上一个数列的相邻两个数的和。
- set num1=1
- for %%b in (!str!) do (
- ::num1是用来控制是相邻两数的前一个数%%i;num2为后一个数%%j
- set /a num1=!num1!+1
- set /a shu=!num1!+1
- set num2=1
- for %%c in (!str!) do (
- set /a num2=!num2!+1
- if !num2!==!shu! set /a sum=%%b+%%c
- )
- set str1=!str1! !sum!
- set sum=
- )
- ::在求出每相邻两数之和后,在前后各加上1
- set str=1!str1!1
- ::用来打印时在数字的前面加上空格
- set /a a=10-%%a
- set b=
- for /l %%d in (0 1 !a!) do (set b= !b!)
- set str=!b!!str!
- set str1=
- echo !str!
- )
- pause
复制代码
作者: sjzong 时间: 2009-4-5 14:27 标题: 纠错了!!【程序21】猴子吃桃问题
【程序21】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.程序分析:采取逆向思维的方法,从后往前推断。
答案:见32楼
注意:32楼那个是错误的!那是先吃一个再吃一半的,所以公式a=2*a+1;而本题是先吃一半后再多吃一个,所以公式为a=2*(a+1)。- @echo off&setlocal EnableDelayedExpansion
- ::程序分析: 注意是先吃一半再吃一个则公式是a=2*(a+1)
- ::原创:sjzong
- set num=1
- echo 第10天时有!num!个桃子
- for /l %%i in (9 -1 1) do (
- set /a num=!num!*2+2
- echo 第 %%i天时有!num!个桃子)
- pause
复制代码
[ 本帖最后由 sjzong 于 2009-4-5 14:44 编辑 ]
作者: sjzong 时间: 2009-4-5 14:40 标题: 纠错了!【程序80】猴子分桃子,那个也是有错误的!
【程序80】
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只
猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了
一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
问海滩上原来最少有多少个桃子?
答案:见44楼
44楼 这个程序也是错误的!正确的是如下:- @echo off&setlocal EnableDelayedExpansion
- ::程序分析:这些桃子,每一只猴子来分的时候,把桃子的数量减一后必须是五的倍数!所以五只猴子来分,必须进行五次判断的!
- ::程序中的num是用来判断是否达到五次判断!
- ::原创:sjzong
- for /l %%i in (1 1 10000) do (
- set /a a=%%i
- set /a num=0
- for /l %%j in (1 1 5) do (
- set /a b=!a!-1
- set /a c=!b! %% 5
- if !c! == 0 (
- set /a a=!b!/5
- set /a a=!a!*4
- set /a num=!num!+1)
- )
- if !num!==5 (echo 最少要%%i只桃子 & goto :end)
- )
- :end
- pause
复制代码
[ 本帖最后由 sjzong 于 2009-4-5 14:44 编辑 ]
作者: sjzong 时间: 2009-4-7 00:34 标题: 【程序37】题目:对10个数进行排序
题目:对10个数进行排序
- @echo off
- setlocal enabledelayedexpansion
- ::原创:sjzong
- echo 请输入十个数字……
- ::读入10个数字,分别放在t1~t10内,并把数字合成一行,中间加个空格。
- set str=
- for /l %%a in (1 1 10) do (
- set /p t%%a=请输入%%a个数:
- set str=!str! !t%%a!
- )
- echo 排序前的数字序列是:!str!
- ::数字排序是采用冒泡排序的,每相邻的两个数进行比较,大的放在后面。
- ::要进行9趟比较,第1趟求出最大放在最后一个数…第9趟是剩下两个数进行比较
- ::其实t%%b代表相邻的前一个数,b代表相邻的后一个数,比较后进行交换
- for /l %%a in (1 1 9) do (
- set /a a=10-%%a
- for /l %%b in (1 1 !a!) do (
- set /a c=%%b+1
- set /a b=t!c!
- if !t%%b! gtr !b! (
- set /a temp=t%%b
- set /a t%%b=t!c!
- set /a t!c!=!temp!
- )
- )
- )
- ::把排序后的数字排列出来
- set str=
- for /l %%a in (1 1 10) do (
- set str=!str! !t%%a!
- )
- echo 排序后的数字序列是:!str!
- pause
复制代码
[ 本帖最后由 sjzong 于 2009-4-7 00:59 编辑 ]
作者: sjzong 时间: 2009-4-7 00:35 标题: 【程序37】题目:对10个数进行排序
题目:对10个数进行排序
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
下次类推,即用第二个元素与后8个进行比较,并进行交换。- @echo off
- setlocal enabledelayedexpansion
- ::原创:sjzong
- echo 请输入十个数字……
- ::读入10个数字,分别放在t1~t10内,并把数字合成一行,中间加个空格。
- set str=
- for /l %%a in (1 1 10) do (
- set /p t%%a=请输入%%a个数:
- set str=!str! !t%%a!
- )
- echo 排序前的数字序列是:!str!
- ::数字排序是采用选择排序的,取第1个数跟后面的9个数进行比较,大的话进行交换。
- ::然后取第2个数跟后面的8个数进行比较,大的进行交换,以此类推。
- for /l %%a in (1 1 9) do (
- set /a a=%%a+1
- for /l %%b in (!a! 1 10) do (
- if !t%%a! gtr !t%%b! (
- set /a temp=t%%a
- set /a t%%a=t%%b
- set /a t%%b=!temp!
- )
- )
- )
- ::把排序后的数字排列出来
- set str=
- for /l %%a in (1 1 10) do (
- set str=!str! !t%%a!
- )
- echo 排序后的数字序列是:!str!
- 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.程序分析:请抓住分子与分母的变化规律。- @echo off
- setlocal enabledelayedexpansion
- ::原创:sjzong
- ::程序分析:每个数的分子是上一个数的分子与分母之和,分母为上一个数的分子
- ::fz为分子,fm为分母
- set fz=1
- set fm=1
- set qiuji=1
- set qiuhe=0
- echo 正在输出这二十个数……
- for /l %%i in (1 1 20) do (
- set /a c=!fm!
- set /a fm=!fz!
- set /a fz=!fz!+!c!
- echo !fz!^/!fm!
- set /a qiuji=!qiuji!*!fz!/!fm!
- set /a qiuhe=!qiuhe!+!fz!/!fm!
- )
- echo.
- echo 这二十个数的积为:!qiuji!
- echo 这二十个数的和为:!qiuhe!
- echo.
- pause
复制代码
[ 本帖最后由 sjzong 于 2009-4-7 00:56 编辑 ]
作者: tyc 时间: 2009-4-7 08:38 标题: try
- ::题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
- @echo off
- setlocal enabledelayedexpansion
- set /a b=1,a=2
- set s=
- for /l %%i in (1,1,20) do (
- set /a c=b+a
- echo !a!/!b!
- set /a s=s+!a!/!b!
- set /a b=a
- set /a a=c
- )
- echo %s%
- pause>nul
复制代码
注:由于限制未能求出小数部分!
作者: tyc 时间: 2009-4-7 10:38 标题: 选择排序法
- @echo off
- setlocal enabledelayedexpansion
- ::选择排序法
- echo 共输入10个数
- for /l %%i in (1,1,10) do (
- set /p a_%%i=请输入%%i个数
- set str=!str! !a_%%i!
- )
- echo %str%
- for /l %%i in (1,1,9) do (
- set /a b=%%i+1
- for /l %%j in (!b!,1,10) do (
- if !a_%%i! gtr !a_%%j! (
- set /a t=a_%%i
- set /a a_%%i=a_%%j
- set /a a_%%j=t
- )
- )
- )
- for /l %%i in (1,1,10) do (
- set str1=!str1! !a_%%i!
- )
- echo %str1%
- 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。
-
- @echo off&setlocal EnableDelayedExpansion
- set /p num=请输入要因数分解的数:
- set str=!num!=1
- :a
- set /a n=2
- :b
- set /a aa=!num! %% !n!
- ::这if语句是能整除的语句,求出商,并记下那个质数n
- if !aa! equ 0 (
- set /a num=!num!/!n!
- set str=!str!*!n!
- ::等于1,分解结束,跳到c,不等于1,继续把商除以素数列,跳到a
- if !num! neq 1 (goto :a) else (goto :c)
- )
- ::这if语句是不能整除的,换下一个素数,并跳到b
- if !aa! neq 0 (
- ::若等于2时n+1,不等于2时n+2
- if !n! equ 2 (set /a n=!n!+1) else (set /a n=!n!+2)
- goto :b
- )
- :c
- echo 分解完是:!str!
- pause
复制代码
[ 本帖最后由 sjzong 于 2009-4-9 00:53 编辑 ]
作者: sjzong 时间: 2009-4-10 09:57 标题: 【程序84】题目:一个偶数总能表示为两个素数之和。
程序分析:这个偶数应该是大于3的偶数,但是大于3的偶数中4是比较特殊的,可拆为两个2的和;其他的偶数一定要拆成两个奇数的和,然后分别判断这两个数是否为素数即可。-
- @echo off
- setlocal enabledelayedexpansion
- ::原创:sjzong
- set /p num=请输入大于3的偶数:
- set /a aa=!num! %% 2
- rem 判断输入的数字是否为偶数
- if !aa! neq 0 (
- cls
- echo 你输入的数字不是偶数!
- set /p num=请再次输入大于3的偶数:
- )
- rem 判断输入的数字是否小于等于3
- if !num! leq 3 (
- cls
- echo 你输入的数字小于4!
- set /p num=请再次输入大于3的偶数:
- )
- rem 判断输入的偶数是否为4,是的话直接拆分为两个2的和,不是的话进行两个奇数的拆分。
- if !num!==4 (echo 偶数 !num! 是素数 2 与 2 的和。) else (
- set /a yiban=!num!/2
- rem 拆分偶数时只需从3到该偶数的一半即可
- for /l %%a in (3 2 !yiban!) do (
- set /a shu=!num!-%%a
- set /a a1=0
- set /a a2=0
- call :test %%a
- if !flag!==1 set /a a1=1
- call :test !shu!
- if !flag!==1 set /a a2=1
- if !a1!==1 if !a2!==1 echo 偶数 !num! 是素数 %%a 与 !shu! 的和。
- )
- )
- pause
- goto :eof
- rem 判断该数是否为素数时,只需计算从1到该数的一半能被该数整除的次数
- rem 次数为1时表示为素数,次数大于1时表示不是素数
- :test
- set /a flag=1
- set /a b=%1/2
- set /a count=0
- for /l %%a in (1 1 !b!) do (
- set /a yushu=%1 %% %%a
- if !yushu! equ 0 set /a count=!count!+1
- if !count! gtr 1 (set /a flag=0 & goto :eof)
- )
复制代码
[ 本帖最后由 sjzong 于 2009-4-10 10:01 编辑 ]
作者: tyc 时间: 2009-4-10 10:30 标题: 八进制转十进制
- @echo off
- setlocal enabledelayedexpansion
- ::判断是否为八进制,共几位
- :1
- set /p bb=请输入八进制整数:
- set /a aa=%bb%
- set /a n=0
- :2
- set b=%aa:~,1%
- if %b% gtr 8 goto :1
- set /a n=n+1
- set aa=!aa:~1!
- if "%aa%" neq "" goto :2
- ::echo %n%
- ::利用权值,求各位十进制值并累加
- :3
- set /a n-=1
- set /a c=%bb:~0,1%
- for /l %%i in (1,1,%n%) do set /a c*=8
- set /a t+=%c%
- set bb=%bb:~1%
- if "%bb%" neq "" goto :3
- echo %t%
- pause>nul
复制代码
[ 本帖最后由 tyc 于 2009-4-10 10:33 编辑 ]
作者: tyc 时间: 2009-4-12 11:54 标题: 十进制转任意进制
- @echo off
- set /p x=要转换的数:
- set /p y=要转换的进制:
- call :10 %x% %y%
- pause>nul
- goto :eof
- :10
- set/a t=%1/%2
- if %t% gtr 0 call :10 %t% %2
- set /a b=%1%%%2
- 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,打印出出列的顺序。- @echo off&setlocal enabledelayedexpansion
- :n
- cls
- set /p n=请输入人数n:
- echo.%n%|findstr "^[1-9][0-9]*$">nul||goto n
- :m
- set /p m=请输入报数m:
- echo.%m%|findstr "^[1-9][0-9]*$">nul||goto m
- for /l %%a in (1 1 %n%) do (if %%a lss 10 (set str=!str! 0%%a) else (set str=!str! %%a))
- set/a b=3*!m!-3
- set/a c=3*!m!
- :loop
- if "!str:~%b%,3!" equ "" (set s1= 空) else (set s1=!s1!!str:~%b%,3!)
- if "!str:~%c%,3!" equ "" (set str=!str:~0,%b%!) else (set str=!str:~%c%!!str:~0,%b%!)
- set/a n-=1
- if not !n! lss !m! goto loop
- echo 出列的数据是:!s1:~1!&set s1=
- if !m! equ 1 (echo 剩下的数据是:空&set str=) else (echo 剩下的数据是:!str:~1!&set str=)
- pause>nul&goto n
复制代码
作者: sxqylz 时间: 2009-7-22 19:29
就是需要这样的贴子啊,给新手们的帮助太大了,看完了教程就得要这样的东西来练练
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |