[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[ 新手练习 10 ] 批处理“切香肠”

要过年了,来切香肠!
一根香肠分 9 节,每节颜色都不同,要切成 3 节一段的;
有许多同样的 9 节香肠,共能切出多少种不同的 3 节香肠呢?
附加问题(2009-05-10 补充):共需要多少根香肠?

目的:自己假设变量模拟香肠(吃不得是当然的^_^),学习变量截取结合条件判断的综合运用方法。

要求:通过计算显示出结果。方法不限。

评分:代码可读性 1 分,思路新颖多加 2 分;
   首个新方法 5 分,第二个 4 分,依次类推,最少 2 分;
   一人可多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。

[ 本帖最后由 wxcute 于 2009-5-10 10:20 编辑 ]

  1. @echo off&setlocal enabledelayedexpansion
  2. set s=123456789
  3. for /l %%a in (0,1,100) do (
  4.     set s1=!s:~%%a,3!
  5.     set s2=!s1:~3!
  6.     if "!s2!"=="" if !s1! gtr 100 set /a n+=1&echo;!s1!
  7. )
  8. echo;!n!
  9. pause
复制代码

TOP

本帖最后由 PowerShell 于 2014-1-6 13:28 编辑
  1. # powershell也来切香肠
  2. <#
  3. 要过年了,来切香肠!
  4. 一根香肠分 9 节,每节颜色都不同,要切成 3 节一段的;
  5. 有许多同样的 9 节香肠,共能切出多少种不同的 3 节香肠呢?
  6. #>
  7. [array]$结果 = ""
  8. $香肠总节数 = 9 + 1
  9. for ($i=1 ;$i -lt $香肠总节数 ;$i++)
  10. {
  11. $香肠尾 = $i
  12. while (  $香肠尾 -lt  $香肠总节数  )
  13. {
  14. $香肠头 = $香肠尾
  15. $香肠尾 = $香肠尾 + 2
  16. if  ($香肠尾 -lt $香肠总节数)
  17. {
  18. $结果 += $香肠头..$香肠尾 -join ""
  19. }
  20. $香肠尾++
  21. }
  22. }
  23. $结果  = $结果 | Sort-Object       -Unique
  24. write-host  $结果
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. :begin
  3. set "s=123456789"
  4. set "s=!s:~%m%!"
  5. :lp
  6. if %s%0 gtr 1000 (set "str=%s:~,3%") else (set /a m+=1&goto begin)
  7. if defined var if "!var:%str%=!" neq "%var%" goto end
  8. set /a n+=1
  9. set "var=%var% %str%"
  10. set "s=!s:*%str%=!"
  11. goto lp
  12. :end
  13. echo Total is %m% sausages %n% kinds
  14. echo%var%
  15. pause
复制代码
我是NO.1 呀﹗不過.......@echo是在菜鳥比賽中....>.<

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=123456789
  4. set/a num=0
  5. for /l %%a in  (0 1 6) do echo !a:~%%a,3!&set/a num+=1
  6. echo 共有 %num% 种方法,方法如上所示!
  7. pause
复制代码
1

评分人数

TOP

我来凑数。见笑!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=123456789
  4. set /a num=9
  5. :start
  6. set b=%a:~0,3%
  7. set /a num-=1
  8. set a=!a:~1,%num%!
  9. if %num%==1 goto end
  10. echo %b% &echo.
  11. goto start
  12. :end
  13. pause
复制代码
(*^_^*)

TOP

我来试试

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (1,1,9) do (
  4. set /a a=%%i
  5. set /a b=!a!+1
  6. set /a c=!b!+1
  7. if  !c! lss 10  set /a d+=1&echo !a! !b! !c!
  8. )
  9. echo 总共有%d%个
  10. pause>nul
复制代码

TOP

回复 1楼 的帖子

@echo off&setlocal enabledelayedexpansion
set str=123456789
echo original--%str%
echo new element is---
for /l %%i in (1 1 7) do (
  set /a x=%%i
  set /a y=%%i+1
  set /a z=%%i+2
  set /p=!x!!y!!z! <nul
)
rem 利用了等差数列1--7,2--8,3--9
--------------------------------------------------------------------------------------------------------------------------------------
---方法2利用call控制堆栈(多加一个%可以控制call,让call推入堆栈的数据是for的结果,而不是for前的结果)
@echo off
set str=123456789
echo original--%str%
echo new element is---
for /l %%i in (1 1 7) do (
call  set /a x=%%%i
call  set /a y=%%%i+1
call set /a z=%%%i+2
call set /p=%%x%%%%y%%%%z%% <nul
)
rem 利用了等差数列1--7,2--8,3--9

[ 本帖最后由 myzwd 于 2009-3-1 21:49 编辑 ]

TOP

@echo off
set /a m=0
call :sas A B C D E F G H I
pause&goto :eof
:sas
set /a m+=1
set /a n=m+1
set /a l=m+2
call echo %%%m% %%%n% %%%l%
if %m%==7 goto :eof
if not %m%==7 goto sas
1

评分人数

TOP

应该是这七种吧
123
234
345
456
567
678
789

TOP

我是一根香肠
123456789

  1. @echo off&setlocal enabledelayedexpansion
  2. set a=0
  3. set b=0
  4. for /l %%i in (1 1 7) do (
  5. set /a a=%%i+1
  6. set /a b=%%i+2
  7. echo %%i !a! !b!
  8. )
  9. pause>nul
复制代码
1

评分人数

TOP

普通思路:
  1. @echo off
  2. set "str=123456789"
  3. echo sausage: %str%
  4. echo When they were cut:
  5. :next
  6. set var=%str:~0,3%
  7. if not (%var:~2,1%) == () (
  8. set /p=%var% <nul
  9. set /a c+=1
  10. set str=%str:~1%
  11. goto next
  12. )
  13. echo.
  14. echo.Total: %c% kinds.
  15. pause>nul
复制代码
1

评分人数

静水流深...

TOP

1*2+2*(9-2)
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

回复 2楼 的帖子

没错,就是 2 楼 BBCC 的这个意思。因为你不可能把 1 和 4 单独切在一起罢!

TOP

貌似有点不懂
1 2 3 4
是只可以 这样:
123
234

吗?
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

返回列表