返回列表 发帖

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

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

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

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

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

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

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

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

TOP

回复 2楼 的帖子

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

TOP

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

TOP

普通思路:
@echo off
set "str=123456789"
echo sausage: %str%
echo When they were cut:
:next
set var=%str:~0,3%
if not (%var:~2,1%) == () (
set /p=%var% <nul
set /a c+=1
set str=%str:~1%
goto next
)
echo.
echo.Total: %c% kinds.
pause>nulCOPY
1

评分人数

静水流深...

TOP

我是一根香肠
123456789

@echo off&setlocal enabledelayedexpansion
set a=0
set b=0
for /l %%i in (1 1 7) do (
set /a a=%%i+1
set /a b=%%i+2
echo %%i !a! !b!
)
pause>nulCOPY
1

评分人数

TOP

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

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

回复 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
setlocal enabledelayedexpansion
for /l %%i in (1,1,9) do (
set /a a=%%i
set /a b=!a!+1
set /a c=!b!+1
if  !c! lss 10  set /a d+=1&echo !a! !b! !c!
)
echo 总共有%d%
pause>nulCOPY

TOP

我来凑数。见笑!
@echo off
setlocal enabledelayedexpansion
set a=123456789
set /a num=9
:start
set b=%a:~0,3%
set /a num-=1
set a=!a:~1,%num%!
if %num%==1 goto end
echo %b% &echo.
goto start
:end
pauseCOPY
(*^_^*)

TOP

@echo off
setlocal enabledelayedexpansion
set a=123456789
set/a num=0
for /l %%a in  (0 1 6) do echo !a:~%%a,3!&set/a num+=1
echo 共有 %num% 种方法,方法如上所示!
pauseCOPY
1

评分人数

TOP

@echo off&setlocal enabledelayedexpansion
:begin
set "s=123456789"
set "s=!s:~%m%!"
:lp
if %s%0 gtr 1000 (set "str=%s:~,3%") else (set /a m+=1&goto begin)
if defined var if "!var:%str%=!" neq "%var%" goto end
set /a n+=1
set "var=%var% %str%"
set "s=!s:*%str%=!"
goto lp
:end
echo Total is %m% sausages %n% kinds
echo%var%
pauseCOPY
我是NO.1 呀﹗不過.......@echo是在菜鳥比賽中....>.<

TOP

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

TOP

@echo off&setlocal enabledelayedexpansion
set s=123456789
for /l %%a in (0,1,100) do (
    set s1=!s:~%%a,3!
    set s2=!s1:~3!
    if "!s2!"=="" if !s1! gtr 100 set /a n+=1&echo;!s1!
)
echo;!n!
pauseCOPY

TOP

返回列表