选择排序法
[code]@echo offsetlocal 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[/code]
【程序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。
[code]
@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[/code]
[[i] 本帖最后由 sjzong 于 2009-4-9 00:53 编辑 [/i]]
【程序84】题目:一个偶数总能表示为两个素数之和。
程序分析:这个偶数应该是大于3的偶数,但是大于3的偶数中4是比较特殊的,可拆为两个2的和;其他的偶数一定要拆成两个奇数的和,然后分别判断这两个数是否为素数即可。[code]@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)
)[/code]
[[i] 本帖最后由 sjzong 于 2009-4-10 10:01 编辑 [/i]]
八进制转十进制
[code]@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
[/code]
[[i] 本帖最后由 tyc 于 2009-4-10 10:33 编辑 [/i]]
十进制转任意进制
[code]@echo offset /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[/code]
[[i] 本帖最后由 tyc 于 2009-4-12 12:17 编辑 [/i]] 精华啊。。 我很是喜欢!! 好了,我承认,你们都是神!
一个菜鸟瞠目结舌,蹚乎其后 看到我都快头晕了,不过很好很强大。
回复 1楼 的帖子
【程序69】题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
改一下:设有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺序。[code]@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[/code] 就是需要这样的贴子啊,给新手们的帮助太大了,看完了教程就得要这样的东西来练练
回复 104楼 的帖子
其实本论坛,还有很多给新手出的题目,在 新手练功区 版块。 来学学,本是也不会正在找人教
答题::组成多少个互不相同且无重复数字的三位数?
程序1[code]@ECHO OFFsetlocal 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 not %%i==%%j (
if not %%i==%%k (
if not %%j==%%k echo %%i%%j%%k)
)
)
)
)
pause[/code]
[[i] 本帖最后由 nopr 于 2009-8-5 20:39 编辑 [/i]]
答题::判断这一天是这一年的第几天?
[code]@ECHO OFFsetlocal enabledelayedexpansion
:1
echo 查询日期请介于1900和2200年之间
ping /n 1 127.1>nul
set /p b=请输入年份:....
if %b% leq 1900 echo 你输入年份不符合要求,请重新输入!&ping /n 2 127.1>nul&cls&goto 1
if %b% gtr 2200 echo 你输入年份不符合要求,请重新输入!&ping /n 2 127.1>nul&cls&goto 1
:2
cls
set /p b1=请输入月份:
if %b1% lss 1 goto 2
if %b1% gtr 12 goto 2
:3
cls
set /p b2=请输入日期:
if %b2% lss 1 goto 3
if %b2% gtr 31 goto 3
cls&set /a b3=%b1%-1
call :4
for /l %%i in (1,1,%b3%) do (
for %%j in (1 3 5 7 8 10 12) do (
if %%i == %%j (set /a a+=31)
)
for %%k in (4 6 9 11) do (
if %%i == %%k (set /a a1+=30)
)
)
for /l %%h in (1900 4 2200) do echo %%h>>a.txt
find "%b%" a.txt >nul && (set /a a2=%a1%+29) || set /a a2=%a1%+28
set /a a3=%a%+%a2%+%b2%
echo 你要查询的日期是%b%的第%a3%天
del a.txt&pause>nul&goto :eof
:4
for /l %%y in (1 1 20) do (
set /p=*<nul
for /l %%z in (1 1 500) do ver>nul
)
cls
goto :eof[/code]
题目:输出9*9口诀
[code]@echo offsetlocal enabledelayedexpansion
for /l %%i in (1,1,9) do (
echo.
for /l %%j in (1,1,9) do (
set /a aa=%%i*%%j
set a=%%jx%%i=!aa!
if %%j leq %%i set/p=!a! <nul
)
)
pause>nul[/code]
题目:要求输出国际象棋棋盘。
[code]@echo offsetlocal enabledelayedexpansion
:1
set/a b+=1
for /l %%j in (1 1 4) do (
set a=□■
set/p=!a!<nul)
echo.
for /l %%i in (1 1 4) do (
set a1=■□
set/p=!a1!<nul)
echo.
if %b% geq 4 pause>nul&goto :eof
call :1[/code]
就是棋盘有点小!
以下是我写的几个程序
**********************************************************************************【程序1】
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
**********************************************************************************
[color=#0000ff][code]
@echo off
for %%i in (1 2 3 4) do (
for %%j in (1 2 3 4) do (
if %%j neq %%i (
for %%k in (1 2 3 4) do (
if %%k neq %%i (
if %%k neq %%j (echo %%i%%j%%k)
)
)
)
)
)
pause>nul
[/code][/color]
**********************************************************************************
【程序2】
输入某年某月某日,判断这一天是这一年的第几天?
**********************************************************************************
[color=#0000ff][code]@echo off
set days=0&setlocal enabledelayedexpansion
set /p date=请输入日期(日期格式 xxxx.xx.xx):
for /f "tokens=1,2,3 delims=./ " %%i in ("%date%") do (
set "year=%%i"&set "month=%%j"&set "day=%%k"
set "run=%%j"
)
for %%l in (0 31 28 31 30 31 30 31 31 30 31 30 31) do (
set /a days=days+%%l
set /a month=month-1
if !month! equ 0 (goto a)
)
:a
set /a days=%day%+!days!
if %run% equ 1 (goto b)
set /a b=year%%400
set /a c=year%%4
set /a d=year%%100
if %b% equ 0 (set /a days=1+days&goto b)
if %c% equ 0 (
if %d% neq 0 (
set /a days=1+days
)
)
:b
echo %date% 是 %year% 年的第 %days% 天
pause>nul[/code][/color]
**********************************************************************************
【程序3】
输出9*9口诀。
**********************************************************************************
[color=#0000ff][code]@echo off&set n=0
for /l %%i in (1 1 9) do (
set a=%%i
for /l %%j in (1 1 9) do (
set b=%%j
call :a
)
echo.
)
pause>nul
:a
if %b% gtr %a% (goto :eof)
set /a num=a*b
set /p "=%a%x%b% = %num% " <nul
set /a n=n+1
goto :eof[/code][/color]
[color=blue][color=black]**********************************************************************************
【程序4】
输出101-200之间所有的素数。
**********************************************************************************[/color] [/color]
[color=blue][/color]
[color=blue][code]@echo off
for /l %%i in (101 1 200) do (
set a=%%i &set n=0
call :calc
)
pause>nul
:calc
for /l %%j in (2 1 15) do (
set b=%%j
call :op
)
if %n% equ 0 (echo %a%)
goto :eof
:op
set /a yu=a%%b
if %yu% equ 0 (set n=1)
goto :eof[/code][/color]
[color=#0000ff][/color]
**********************************************************************************
【程序5】
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1^3+5^3+3^3
**********************************************************************************
[color=#0000ff][code]@echo off
for /l %%i in (1 1 9) do (
set a=%%i
for /l %%j in (0 1 9) do (
set b=%%j
for /l %%k in (0 1 9) do (
set c=%%k
set num=%%i%%j%%k
call :calc
)
)
)
pause>nul
:calc
set /a sum=a*a*a+b*b*b+c*c*c
if %num% equ %sum% (echo %num%)
goto :eof[/code][/color]
[color=blue][color=black]**********************************************************************************
【程序6】
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
**********************************************************************************[/color] [/color]
[color=blue][code]@echo off
set n=1
set /p num=请输入一个数字:
set /p "=%num%=" <nul
:start
for /l %%i in (2 1 %num%) do (
set a=%%i
call :sp
)
pause>nul
:sp
set /a yu=num%%a
set /a sh=num/a
if %yu% equ 0 (
set /a num=sh
if %n% neq 1 (set /p "=*" <nul)
set /p "=%a%" <nul & set n=0
goto start
)[/code][/color]
[color=#0000ff][/color]
[color=#0000ff][/color]
**********************************************************************************
【程序7】
输入两个正整数m和n,求其最大公约数和最小公倍数。
**********************************************************************************
[color=#0000ff][code]@echo off
set /p n=请输入数字 n=
set /p m=请输入数字 m=
if %m% gtr %n% (
set /a min=n & set /a max=m
) else (
set /a min=m & set /a max=n
)
for /l %%i in (%min% -1 1) do (
set a=%%i
call :sp
)
:an
echo 最大公约数是 %a%
echo 最小公倍数是 %b%
pause>nul &exit
:sp
set /a y1=n%%a
set /a y2=m%%a
set /a s=max%%min
if %s% equ 0 (
set /a b=max ) else (
set /a b=max*min
)
if %y1% equ 0 (
if %y2% equ 0 (
if %y1% equ %y2% (goto an)
)
)[/code][/color]
[[i] 本帖最后由 wangshuping42 于 2009-9-30 14:36 编辑 [/i]] 好帖子 用来练习for再好不过 对我学习c++也有极大帮助啊 这好像不适合新手做吧。。 好久没来了
稍微做几题:
第一题 记得用递归可以做...但这里就用for了[code]@echo off
for /l %%i in (1 1 4) do (
for /l %%k in (1 1 4) do (
if %%i neq %%k (
for /l %%j in (1 1 4) do (
if %%j neq %%i if %%j neq %%k (
for /l %%x in (1 1 4) do (
if %%x neq %%j if %%x neq %%i if %%x neq %%k echo %%i%%k%%j%%x
)
)
)
)
)
)
pause[/code]乘法表是什么东西??看看对不对[code]@echo off&setlocal enabledelayedexpansion
for /l %%i in (1 1 9) do (
for /l %%k in (1 1 %%i) do (
set /a a=%%k *%%i
set a= !a!
set a=!a:~-2!
set g=!g!"%%k*%%i=!a!"
)
echo !g:"=!
set a=
set g=
)
pause[/code]水仙花树
9*10*10=900 效率差不多吧??[code]@echo off&setlocal enabledelayedexpansion
for /l %%i in (1 1 9) do (
for /l %%k in (0 1 9) do (
for /l %%j in (0 1 9) do (
set /a a=%%i*100+%%k*10+%%j
set /a b=%%i*%%i*%%i+%%k*%%k*%%k+%%j*%%j*%%j
if !a! equ !b! echo 百位 %%i 十位 %%k 各位 %%j
)
)
)[/code]就只做这么多了 用其他语言都做过了 呵呵 回味一下
不错 程序1:
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
掉不满足条件的排列。[code]@echo off
set a=0
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 %%i neq %%k (
set/a a=a+1&if %%k neq %%j echo %%i %%j %%k))))
echo 共 %a% 个
pause
[/code]先做一个题----^-^
[[i] 本帖最后由 vsbat 于 2009-10-17 19:27 编辑 [/i]] tuifei 来学习····· 感觉好难咯!
继续努力!
楼主你等我的答案哈!
回复 32楼 的帖子
楼主的好像不太对哟。[code]@echo off&setlocal EnableDelayedExpansionecho 倒数第1天时有1个桃子
set a=1
for /l %%i in (2,1,10) do (
set /a a=a+1
set /a a=a*2
echo 倒数第%%i天时有!a!个桃子)
pause[/code]
回复 32楼 的帖子(关于猴子吃桃问题)
[code]@echo off&setlocal EnableDelayedExpansionset a=1
for /l %%i in (2,1,10) do (
echo 倒数第%%i天时有!a!个桃子
set /a a=a+1
set /a a=a*2
)
pause[/code]
关于猴子吃桃问题
不好意思,刚才打错了一个数字[code]@echo off&setlocal EnableDelayedExpansionset a=1
for /l %%i in (1,1,10) do (
echo 倒数第%%i天时有!a!个桃子
set /a a=a+1
set /a a=a*2
)
pause[/code] [quote] set/a res=%%a*%%b
set "res=!res! " %======此处用来对齐=========%
set/p=%%ax%%b=!res:~0,2! <nul [/quote]
7 楼的这个 对齐 真是让人学习啦------------每次 res 都是两个字符----
这样在 3x3=9 4x3=12 处就都对得齐了--------- **********************************************************************************
【程序37】
题目:对10个数进行排序
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
下次类推,即用第二个元素与后8个进行比较,并进行交换。
**********************************************************************************[code]@echo off
setlocal enabledelayedexpansion
for /l %%l in (1 1 10) do set /p a%%l=请输入第%%l个数:
for /l %%k in (1 1 9) do (
set max=%%k
for /l %%i in (%%k 1 10) do (call,set mm=%%a!max!%%&if !a%%i! gtr !mm! (set max=%%i))
call,set t=%%a!max!%%&set a!max!=!a%%k!&set a%%k=!t!)
echo\
echo 从大到小排序后如下:
for /l %%j in (1 1 10) do echo !a%%j!
pause>nul[/code]::选择法排序
::原理是设序号max它代表最大数的序数,先假设max为1----然后把他与其他一一比较---比它大就把那个数的序号赋给max--这样从1到9比较下来最大的数的序数就确定下开了--然后把它与a1交换==
使其为首位----然后利用循环 对 从2开始的数重复此过程---把第二大的数挑出来--
一直到第9大的数,即外循环是9次
从而实现从大到小排序----------
代码中注意--变量嵌套==
[[i] 本帖最后由 vsbat 于 2009-11-1 21:03 编辑 [/i]]
回复 3楼 的帖子
我要看答案 没办法了 [quote]原帖由 [i]huajinghua[/i] 于 2008-4-11 19:48 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=3737&ptid=850][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]【程序21】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到 ... [/quote]
兄弟你这题想得不够周全,若依你的答案,倒数第二天时剩3只桃子,倒数第一天是否只剩半只?
桃子总数应该是1534只[code]@echo off&setlocal EnableDelayedExpansion
set a=1
for /l %%i in (2,1,10) do (
set /a a+=1,a*=2
echo 倒数第%%i天时有!a!个桃子)
pause[/code]