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

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

[复制链接]
发表于 2009-1-3 20:32:59 | 显示全部楼层 |阅读模式
要过年了,来切香肠!
一根香肠分 9 节,每节颜色都不同,要切成 3 节一段的;
有许多同样的 9 节香肠,共能切出多少种不同的 3 节香肠呢?
附加问题(2009-05-10 补充):共需要多少根香肠?

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

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

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

[ 本帖最后由 wxcute 于 2009-5-10 10:20 编辑 ]
发表于 2009-1-3 21:29:06 | 显示全部楼层
貌似有点不懂
1 2 3 4
是只可以 这样:
123
234

吗?
 楼主| 发表于 2009-1-4 10:53:51 | 显示全部楼层

回复 2楼 的帖子

没错,就是 2 楼 BBCC 的这个意思。因为你不可能把 1 和 4 单独切在一起罢!
发表于 2009-1-4 21:37:17 | 显示全部楼层
1*2+2*(9-2)
发表于 2009-1-5 01:42:09 | 显示全部楼层
普通思路:
  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
复制代码

评分

参与人数 1PB +5 收起 理由
wxcute + 5 多谢捧场

查看全部评分

发表于 2009-1-5 09:41:12 | 显示全部楼层
我是一根香肠
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
复制代码

评分

参与人数 1PB +6 收起 理由
wxcute + 6 不错

查看全部评分

发表于 2009-1-5 09:50:01 | 显示全部楼层
应该是这七种吧
123
234
345
456
567
678
789
发表于 2009-1-9 16:14:26 | 显示全部楼层
@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

评分

参与人数 1PB +6 收起 理由
wxcute + 6 不错不错

查看全部评分

发表于 2009-3-1 21:43:44 | 显示全部楼层

回复 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 编辑 ]
发表于 2009-3-13 20:13:26 | 显示全部楼层

我来试试

  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
复制代码
发表于 2009-3-13 22:03:06 | 显示全部楼层
我来凑数。见笑!
  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
复制代码
发表于 2009-5-10 00:18:57 | 显示全部楼层
  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
复制代码

评分

参与人数 1PB +3 收起 理由
wxcute + 3 不错阿。

查看全部评分

发表于 2014-1-6 11:47:56 | 显示全部楼层

  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
复制代码
发表于 2014-1-6 13:25:41 | 显示全部楼层
本帖最后由 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  $结果


复制代码
发表于 2015-8-10 12:18:56 | 显示全部楼层
  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 22:05 , Processed in 0.028350 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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