代码没有优化:- @echo off
- for /f "tokens=1* delims=*" %%a in ('more +30^<"%~fs0"') do call:hanye %%a %%b
- pause&exit
- :hanye
- setlocal enabledelayedexpansion
- set n=%1&set m=%2&set n=!n:~0,-1!&set m=!m:~0,-1!&set n=!n:.=!
- :s60
- set/a n_60+=1
- set/a y_60_!n_60!=60-n*n_60,k_60=n_60,x_60_!n_60!=1
- if !y_60_%n_60%! geq %n% goto:s60
- set/a n_60+=1,y_60_0=y_60_!k_60!,v_60=2
- for /l %%a in (%n_60%,1,%m%) do (set/a n_60=%%a,y=%%a%%k_60,w_60+=1
- set/a y_60_%%a=y_60_!y!
- if !w_60! gtr !k_60! (set/a v_60+=1,x_60_%%a=v_60,w_60=1) else set x_60_%%a=!v_60!)
- set/a y_60_0=0,x_60_0=0
- :s54
- set/a n_54+=1
- set/a y_54_!n_54!=54-n*n_54,k_54=n_54,x_54_!n_54!=1
- if !y_54_%n_54%! geq %n% goto:s54
- set/a n_54+=1,y_54_0=y_54_!k_54!,v_54=2
- for /l %%a in (%n_54%,1,%m%) do (set/a n_54=%%a,y=%%a%%k_54,w_54+=1
- set/a y_54_%%a=y_54_!y!
- if !w_54! gtr !k_54! (set/a v_54+=1,x_54_%%a=v_54,w_54=1) else set x_54_%%a=!v_54!)
- set/a y_54_0=0,x_54_0=0
- for /l %%a in (0,1,%m%) do (set/a b=m-%%a
- set/a z_%%a=y_60_%%a+y_54_!b!)
- for /F " tokens=1-3 delims==_" %%a in ('set z_') do if not defined bc (set bc=%%c&set a=%%b) else if %%c lss !bc! set bc=%%c&set a=%%b
- set/a b=m-a
- echo.%1*%2:需要6米的铝材 !x_60_%a%! 根;需要5.4米的铝材 !x_54_%b%! 根.
- Endlocal&goto:eof
- 1.8米*10支
- 1.5米*20支
- 2.2米*30支
- 3.1米*15支
复制代码 结果:1.8米*10支:需要6米的铝材 0 根;需要5.4米的铝材 4 根.
1.5米*20支:需要6米的铝材 5 根;需要5.4米的铝材 0 根.
2.2米*30支:需要6米的铝材 0 根;需要5.4米的铝材 15 根.
3.1米*15支:需要6米的铝材 0 根;需要5.4米的铝材 15 根.
[ 本帖最后由 hanyeguxing 于 2010-5-25 04:27 编辑 ] |