找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 50513|回复: 18

批处理求1-10000以内的所有水仙花数?

[复制链接]
发表于 2008-1-3 23:18:43 | 显示全部楼层 |阅读模式
水仙花数是这样的数字:这个数各个数位上数字的立方和等于该数。比如 153=1*1*1+5*5*5+3*3*3
发表于 2008-3-27 11:16:18 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%a in (1,1,9) do (
  4. for /l %%b in (0,1,9) do (
  5. set /a bb=%%a*%%a+%%b*%%b
  6. if !bb!==%%a%%b echo   %%a%%b 是水仙花数
  7. for /l %%c in (0,1,9) do (
  8. set /a aa=%%a*%%a*%%a+%%b*%%b*%%b+%%c*%%c*%%c
  9. if !aa!==%%a%%b%%c echo   %%a%%b%%c 是水仙花数
  10. for /l %%d in (0,1,9) do (
  11. set /a cc=%%a*%%a*%%a+%%b*%%b*%%b+%%c*%%c*%%c+%%d*%%d*%%d
  12. if !cc!==%%a%%b%%c%%d echo %%a%%b%%c%%d 是水仙花数
  13. ))))
  14. echo.&pause
复制代码
发表于 2008-3-29 18:26:36 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "u1="
  4. for /l %%i in (0,1,9) do set /a t%%i=%%i*%%i*%%i
  5. for /l %%i in (1,1,10000) do (
  6. set k=%%i
  7. set /a a=%%i/10000
  8. set /a b=%%i/1000"%%"10
  9. set /a c=%%i/100"%%"10
  10. set /a d=%%i/10"%%"10
  11. set /a e=%%i"%%"10
  12. set /a n=t!a!+t!b!+t!c!+t!d!+t!e!
  13. if "!n!" == "%%i" echo %%i
  14. )
  15. pause
复制代码
请问有没有效率高的算法?

评分

参与人数 1PB +5 收起 理由
随风 + 5 不错

查看全部评分

发表于 2008-3-29 19:37:35 | 显示全部楼层

回复 3楼 的帖子

你这个效率应该是很高了,所用的时间应该是for /l 必须的时间了吧。。
发表于 2008-10-31 12:20:07 | 显示全部楼层

求教:

@echo off&setlocal EnableDelayedExpansion
for /l %%k in (0,1,9) do ( set /a t%%k=%%k*%%k*%%k )
for /l %%i in (1,1,10000) do (
  set num=%%i
  set "n="
  :loop
    set /a a=!num!%%10
    set /a num/=10
    set /a n+=t!a!
  if !num! neq 0 goto loop
  if !n!==%%i echo %%i
)
pause
此段代码第二个for循环为何只能循环10次??
发表于 2009-2-9 20:38:17 | 显示全部楼层
  1. @echo off

  2. setlocal EnableDelayedExpansion

  3. for /l %%a in (1,1,10000) do (

  4. set /a a=%%a/10000
  5. ::万
  6. set /a b=%%a/1000-!a!*10
  7. ::千
  8. set /a c=%%a/100-!a!*100-!b!*10
  9. ::百
  10. set /a e=%%a/10-!a!*1000-!b!*100-!c!*10
  11. ::十
  12. set /a d=%%a%%10
  13. ::个
  14. set /a k=!a!*!a!*!a!+!b!*!b!*!b!+!c!*!c!*!c!+!d!*!d!*!d!+!e!*!e!*!e!

  15. if !k! == %%a echo %%a
  16. )

  17. pause
复制代码
好长啊~~~~惭愧~~~
望大家指点!!
发表于 2009-2-15 21:51:21 | 显示全部楼层

我来试试

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (1,1,10000) do (
  4. set /a a=%%i/10000
  5. set /a b=%%i-!a!*10000,b=b/1000
  6. set /a c=%%i-!a!*10000-!b!*1000,c=c/100
  7. set /a d=%%i-!a!*10000-!b!*1000-!c!*100,d=d/10
  8. set /a e=%%i%%10
  9. set /a aa=a*a*a+b*b*b+c*c*c+d*d*d+e*e*e
  10. if %%i==!aa! echo %%i是水仙花数
  11. )
  12. pause>nul
复制代码
发表于 2009-2-15 22:00:48 | 显示全部楼层

第二种方法(都是笨的)

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (10000,-1,1) do (
  4. set k=%%i
  5. set a=!k:~0,1!
  6. set b=!k:~1,1!
  7. set c=!k:~2,1!
  8. set d=!k:~3,1!
  9. set e=!k:~4,1!
  10. set /a aa=a*a*a+b*b*b+c*c*c+d*d*d+e*e*e
  11. if %%i==!aa! echo %%i是水仙花数
  12. )
  13. pause>nul
复制代码
发表于 2009-2-17 23:59:08 | 显示全部楼层
说实话, 不能完全理解... 看了一次楼上几位的代码后,根据自己的理解和回忆..还是写不出来!!
发表于 2009-2-22 22:59:56 | 显示全部楼层
楼上高手,受教了!厉害
发表于 2009-2-23 00:45:04 | 显示全部楼层
原帖由 irresolute 于 2009-2-15 22:00 发表
@echo off
setlocal enabledelayedexpansion
for /l %%i in (10000,-1,1) do (
set k=%%i
set a=!k:~0,1!
set b=!k:~1,1!
set c=!k:~2,1!
set d=!k:~3,1!
set e=!k:~4,1!
set /a aa=a*a*a+b*b*b+c*c*c+d*d* ...
感觉这段写得非常漂亮,只是set a=!k:~0,1!
set b=!k:~1,1!
set c=!k:~2,1!
set d=!k:~3,1!
set e=!k:~4,1!这里我不太明白
发表于 2009-2-24 21:04:07 | 显示全部楼层

请问

%~si和%~fi 我真没搞明白差别在那里。
发表于 2009-5-9 00:43:05 | 显示全部楼层

我来试试

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (0 1 9) do set/a t%%a=%%a*%%a*%%a
  3. for /l %%i in (1 1 9) do (
  4. if !t%%i!==%%i echo %%i 是水仙花数。
  5. for /l %%j in (0 1 9) do (
  6.   set/a num=!t%%i!+!t%%j!
  7.   if !num!==%%i%%j echo %%i%%j 是水仙花数。
  8.   for /l %%k in (0 1 9) do (
  9.    set/a num=!t%%i!+!t%%j!+!t%%k!
  10.    if !num!==%%i%%j%%k echo %%i%%j%%k 是水仙花数。
  11.    for /l %%l in (0 1 9) do (
  12.    set/a num=!t%%i!+!t%%j!+!t%%k!+!t%%l!
  13.    if !num!==%%i%%j%%k%%l echo %%i%%j%%k%%l 是水仙花数。
  14. ))))
  15. pause>nul
复制代码

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

评分

参与人数 1PB +3 收起 理由
wxcute + 3 不错,效率也很高。

查看全部评分

发表于 2011-6-1 09:52:55 | 显示全部楼层
水仙花数的定义错了

水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。

例如:1^3 + 5^3 + 3^3 = 153,1634 = 1^4 + 6^4 + 3^4 + 4^4 = 1634
发表于 2011-6-9 21:46:14 | 显示全部楼层
11# pzspdl


%a:~[m[,n]]%
方括号表示可选,%为变量标识符,a为变量名,不可少,冒号用于分隔变量名和说明部分,符号~可以
简单理解为“偏移”即可,m为偏移量(缺省为0),n为截取长度(缺省为全部)
%PATH:~10,5% 这个什么意思,看例子:

截取功能例子1:
@echo off
set a=bbs.verybat.cn
set var=%a:~1,2%
echo %var%
pause

我也是菜鸟,这个题我也写了半天没写出来,最后是参照别人实现了,没脸发上来了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 03:10 , Processed in 0.028766 second(s), 11 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表