标题: 批处理列出1000以内回文数 [打印本页]
作者: wxcute 时间: 2008-9-17 21:34 标题: 批处理列出1000以内回文数
[新手练功区的新手跟帖不多,可能是因为题目太难了。各位等等新手两天再回答好了。]
我国古代有一种回文诗,倒念顺念都有意思,例如“人过大佛寺”,倒读起来便是“寺佛大过人”。还有经典的对联“客上天然居,居然天上客”。此种例子举不胜举。
从左向右读与从右向左读完全一样的数字就是回文数,如11、121、767等等。
作者: pusofalse 时间: 2008-9-17 21:43
经典!以前做过一个找出10000以内的回文数的题目,都一样。就是不知131 464 15751
这样的是不是回文数。
作者: wxcute 时间: 2008-9-17 22:05
对阿,就是这样的。
10000太多了,少点给人在感觉上压力不会太大。
作者: wwjpl 时间: 2008-9-18 09:36
"上海自来水来自海上"
正念倒念都一样,算不算回文?
作者: batman 时间: 2008-9-18 10:37
看来新手们是不想解答此题,本人先来抛个“砖”吧,期待“玉”的出现:- @echo off
- for /l %%i in (11,1,999) do set "str=%%i"&call :lp %%i
- pause>nul
- :lp
- set "a=%a%%str:~,1%"&set "b=%b%%str:~-1%"
- set "str=%str:~1,-1%"
- if defined str goto lp
- if %a% equ %b% echo %1
- set "a="&set "b="
复制代码
作者: youxi01 时间: 2008-9-18 12:36
楼上效率必然不高
其实可以观察回文数的特点:左右两边对称
巧妙的方法可以直接通过for即可,数秒内就可找出10000以内所有的回文数
作者: batman 时间: 2008-9-18 12:46
原帖由 youxi01 于 2008-9-18 12:36 发表
楼上效率必然不高
其实可以观察回文数的特点:左右两边对称
巧妙的方法可以直接通过for即可,数秒内就可找出10000以内所有的回文数
楼上说是的即是,本人也是用这种多层循环的方法解的,之所以没有贴出来,是想引其他人来把这块玉献出来。。。
[ 本帖最后由 batman 于 2008-9-18 12:48 编辑 ]
作者: youxi01 时间: 2008-9-18 12:46
当然楼上的思路是投机取巧的办法,不是真正意义上的检测 回文数,纯粹是列出
作者: youxi01 时间: 2008-9-18 12:53
测试代码:- @echo off
- for /l %%i in (1 1 9) do (
- echo %%i%%i
- set/a n+=1
- for /l %%j in (0 1 9) do (
- echo %%i%%j%%i
- echo %%i%%j%%j%%i
- set/a n+=2
- )
- )
- echo 10000以内总共有回文数%n%个
- pause>nul
复制代码
不过考虑全了没有,我就不知道了
作者: youxi01 时间: 2008-9-18 13:03
楼上的还有些不全:四位数的不见了
还有一些4004,404之类
我的代码稍微加入了统计回文数个数...
作者: lovelymorning 时间: 2008-9-18 16:43
- @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (11,1,999) do (
- set a=%%i
- if "!a:~0,1!"=="!a:~-1!" echo %%i
- )
- pause
复制代码
献丑了。。。
作者: z_berry 时间: 2008-9-23 13:20
0,1,2,3,4,5,6,7,8,9不算吗?
原帖由 youxi01 于 2008-9-18 12:53 发表
测试代码:@echo off
echo 0set n=1for /l %%i in (1 1 9) do (
echo %%i
echo %%i%%i
set/a n+=2
for /l %%j in (0 1 9) do (
echo %%i%%j%%i
echo %%i%%j%%j%%i
set/a n+=2
)
)
echo 10000以内总共有回文数%n%个
paus ...
[ 本帖最后由 z_berry 于 2008-9-23 13:21 编辑 ]
作者: wxcute 时间: 2008-10-2 17:44
这是我的不严谨之处。
我自己也不大清楚。
如果单个数也是的话,就要从 0 开始循环了。
作者: h5599859 时间: 2008-10-6 12:11
请问9楼的你代码中的set /a n+=1和set /a n+=2这两个在这段代码中各表示什么意思啊
作者: wxcute 时间: 2008-10-8 19:09
回 14 楼
set /a n+=1 等同于 set /a n=n+1
set /a n+=2 等同于 set /a n=n+2
作者: qq641255849 时间: 2008-10-9 13:20
- @echo off
- for /l %%a in (11,1,999) do (set str=%%a&call :a)
- pause
- :a
- set n3=%str:~0,1%
- set n2=%str:~1,1%
- set n1=%str:~2,1%
- if "%n1%" equ "" (set rts=%n2%%n3%) else (set rts=%n1%%n2%%n3%)
- if %rts% equ %str% (echo %str%)
- goto :eof
复制代码
上学时想的..
作者: stu_light 时间: 2008-10-15 23:09
小第不才 只能顶上去.
作者: zqy 时间: 2008-10-30 20:44
- @echo off
- for /l %%i in (1 1 9) do (
- echo %%i%%i
- for /l %%j in (0 1 9) do (
- echo %%i%%j%%i
- )
- )
- pause>nul
复制代码
参照youxi01的方法,自己写的.
作者: zqy 时间: 2008-10-30 20:46 标题: 回复 16楼 的帖子
你的效率明显的低于我的效率..
作者: keen 时间: 2009-4-2 22:38
- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (0 1 1000) do (
- set a=%%i
- if "!a:~0,1!"=="!a:~-1,1!" echo !a!
- )
- pause
复制代码
[ 本帖最后由 keen 于 2009-4-2 22:39 编辑 ]
作者: keen 时间: 2009-4-2 23:14
来个10000以内的回文数:- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (0 1 1000) do (
- set a=%%i
- if "!a:~0,1!"=="!a:~-1,1!" echo !a!
- )
- for /l %%i in (1001 1 10000) do (
- set a=%%i
- if "!a:~0,1!"=="!a:~-1,1!" if "!a:~1,1!"=="!a:~-2,1!" echo !a!
- )
- pause
复制代码
其实是在1000以内的多加几行。
作者: keen 时间: 2009-4-2 23:30
简洁10000以内的回文数:- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (0 1 10000) do (
- set a=%%i
- if "!a:~0,1!"=="!a:~-1,1!" if !a! lss 1000 (echo !a!) else (if "!a:~1,1!"=="!a:~-2,1!" echo !a!)
- )
- pause
复制代码
作者: cainiao736 时间: 2009-4-4 16:32
- @echo off&setlocal enabledelayedexpansion
- for /l %%i in ( 10,1,999 ) do (
- set str=%%i
- set a=!str:~0,1!
- set b=!str:~-1,1!
- if "!a!"=="!b!" echo %%i)
- pause
复制代码
10000以内的
- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (10,1,10000) do (
- set str=%%i
- set a=!str:~0,1!
- set b=!str:~-1,1!
- set c=!str:~1,1!
- set d=!str:~-2,1!
- if "!a!"=="!b!" ( if "!c!"=="!d!" echo !str!))
- pause
复制代码
[ 本帖最后由 cainiao736 于 2009-4-4 16:45 编辑 ]
作者: sjzong 时间: 2009-4-26 21:52 标题: 我也试试
这个问题如果是每一个数去判断的话,那效率是低点,但是这样求出的数是有顺序的!- @echo off
- setlocal enabledelayedexpansion
- for %%a in (1 2 3 4 5 6 7 8 9) do (
- rem 以下两句是求两位的回文数
- echo %%a%%a
- set/a num+=1
- for %%b in (0 1 2 3 4 5 6 7 8 9) do (
- rem 以下两句是求三位的回文数
- echo %%a%%b%%a
- set/a num+=1
- rem 以下两句是求四位的回文数
- echo %%a%%b%%b%%a
- set/a num+=1
- )
- )
- echo 10000以内回文数共有!num!
- pause
复制代码
作者: lxzzr 时间: 2009-4-27 02:15 标题: 100到10000000以内的回文数
100以内的就不去“数”了。- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (100,1,10000000) do (
- set a=%%a
- if "!a:~0,1!" == "!a:~-1,1!" (
- if "!a:~1,1!" == "!a:~-2,1!" (
- if "!a:~2,1!" == "!a:~-3,1!" (
- echo !a!
- ))))
- pause
复制代码
作者: scarcr 时间: 2011-8-4 18:24
回复 1# wxcute - @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (10 1 999) do (
- set "a=%%i"
- if "!a:~,1!" equ "!a:~-1!" (echo !a!)
- )
- pause
复制代码
作者: PCL505512957 时间: 2011-8-18 00:04
- @if not defined debug @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1 1 1000) do (
- set /a a=%%i/100
- set /a b=%%i/10-!a!*10
- set /a c=%%i-!a!*100-!b!*10
- if !c! equ !a! (if not !a! equ 0 echo %%i)
- )
- pause >nul
复制代码
作者: mxxcgzxxx 时间: 2011-8-18 07:50
本帖最后由 mxxcgzxxx 于 2011-8-18 08:09 编辑
给个新思路,100000以内回文数
怎么就没人想出这个方案呢??很容易啊- @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (1 1 99) do (
- set /a a=%%i/10+%%i%%10*10+100
- if !a:~-1!==0 (set a=!a:~-2,1!) else (set a=!a:~-2!)
- echo %%i!a!
- for /l %%j in (0 1 9) do echo %%i%%j!a!
- pause>nul
- )
- set /a b=99*11
- echo 100000以内有%b%个回文数
- pause>nul
复制代码
作者: 悬崖之树 时间: 2013-2-5 22:50
- @echo off
- setlocal enabledelayedexpansion
-
- for /l %%i in (0,1,1200) do (
- set a=%%i
- if "!a:~0,1!"=="!a:~-1!" (
- if "!a:~1,1!"=="" (
- echo !a!>>1.txt
- ) else (
- if "!a:~1,1!"=="!a:~-2,1!" (
- if "!a:~3,1!"=="" (
- echo !a!>>1.txt
- ) else echo 你的数太大啦!&goto out
- )
- )
- )
- )
- :out
- pause
复制代码
作者: 悬崖之树 时间: 2013-2-6 20:53
回复 29# 悬崖之树
这个代码有问题,并不是只要测试到六位数就提示“你输入的数太大了”,而是要到类似 “124521” 之类的六位数才会提示。下面是改进后的- @echo off
- setlocal enabledelayedexpansion
- if exist 1.txt del 1.txt
- :ks
- set /p num=请输入一个最多5位的正整数:
- if %num% gtr 999999 echo 你的数太大了,请重新输入!& goto ks
- for /l %%i in (0,1,%num%) do (
- set a=%%i
- if "!a:~0,1!"=="!a:~-1!" (
- if "!a:~3,1!"=="" (
- echo !a!>>1.txt
- ) else (
- if "!a:~1,1!"=="!a:~-2,1!" (
- if "!a:~5,1!"=="" (
- echo !a!>>1.txt
- )
- )
- )
- )
- )
- echo 结果已经保存在当前目录下的1.txt文件中
- pause
复制代码
作者: zqy220422 时间: 2014-11-14 09:45
你们是怎么样炼成的啊
作者: shelluserwlb 时间: 2014-11-20 09:27
本帖最后由 shelluserwlb 于 2014-11-20 09:40 编辑
- @echo off
- goto :START
- 我国古代有一种回文诗,倒念顺念都有意思,例如“人过大佛寺”,倒读起来便是“寺佛大过人”。还
- 有经典的对联“客上天然居,居然天上客”。此种例子举不胜举。
- 从左向右读与从右向左读完全一样的数字就是回文数,如11、121、767等等。
- :START
- MODE CON LINES=200
- setlocal enabledelayedexpansion
- set /a total=0
- for /l %%i in (11,1,10000) do (
- set num=%%i
- :: 判断小于1000的数字
- if !num! lss 1000 (
- if "!num:~0,1!"=="!num:~-1,1!" (
- echo !num! & set /a total+=1
- )
- )
- ::判断大于等于1000且小于10000的数字
- if !num! geq 1000 ( if !num! lss 10000 (
- if "!num:~0,1!"=="!num:~-1,1!" ( if "!num:~1,1!"=="!num:~2,1!" (
- echo !num! & set /a total+=1
- ))
- ))
- )
- echo 一万以内总共有%total%个回文件数。
- endlocal & pause>NUL
复制代码
上述是找出10000以内的回文数的批处理代码。
作者: shelluserwlb 时间: 2014-12-6 23:45
本帖最后由 shelluserwlb 于 2014-12-6 23:53 编辑
参照18楼的代码,改了一下,按从小到大的顺序显示1000以内的回文数(1个数字不能算回文数)。- @echo off
- for /l %%i in (1,1,9) do echo %%i%%i
- for /l %%i in (1,1,9) do (
- for /l %%j in (0,1,9) do (
- echo %%i%%j%%i
- )
- )
- pause
复制代码
作者: shelluserwlb 时间: 2014-12-7 00:20
参照9楼的代码,按从小到大的顺序完全列出10000以内的回文数
(效率应该不会差到哪里去的。)- @echo off
- set /a total=9
- for /l %%i in (1,1,9) do echo %%i%%i
- for /l %%i in (1,1,9) do (
- for /l %%j in (0,1,9) do (
- echo %%i%%j%%i
- set /a total+=1
- )
- )
- for /l %%i in (1,1,9) do (
- for /l %%j in (0,1,9) do (
- echo %%i%%j%%j%%i
- set /a total+=1
- )
- )
- echo 一万以内共有%total%个回文数!
- pause>nul
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |