[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
这种题真的是为难批处理了~~~
搞了半天,还是不能通用!!只能就题解答
  1. @echo off&setlocal enabledelayedexpansion
  2. ::////////////////////////
  3. for /f "tokens=1-2 delims=米*支" %%a in (%~nx0) do (
  4.         if "%%a" equ "铝材:" set s=lc&set n=
  5.         if "%%a" equ "切割:" set s=cg&set/a lcx=!n!-1&set n=
  6.         if defined s if defined n set !s!!n!=%%a&set !s!!n!n=%%b&set vars=!vars! !s!!n!
  7.         set /a n+=1
  8. )
  9. set/a cgx=!n!-1
  10. :::://////把数据读入到变量
  11. ::set lc
  12. ::set cg
  13. ::set vars
  14. ::pause
  15. ::////////////////////////
  16. for %%a in (%vars%) do (
  17.         for /f "delims=. tokens=1,2" %%c in ("!%%a!") do (set ver=%%d0)
  18.         set d=0
  19.         for /l %%b in (0,1,10) do (
  20.                 if "!ver:~%%b,1!" neq "" set d=%%b
  21.         )
  22.         set d%%a=!d!
  23.         if !d! gtr !dot! set dot=!d!
  24. )
  25. set ver=0000000000
  26. for %%a in (%vars%) do (
  27.         set /a n=dot-d%%a
  28.         for %%b in (!n!) do set d%%a=!%%a:.=!!ver:~,%%b!
  29. )
  30. ::set d
  31. ::pause
  32. ::////////////小数位调整
  33. ::////////////////////////
  34. for /l %%a in (1,1,!cgx!) do (
  35.         for /l %%b in (1,1,!cgx!) do (
  36.                 if !cg%%a! leq !cg%%b! set /a bcg%%a+=1
  37. ))
  38. set n=0
  39. for /l %%a in (1,1,!cgx!) do (
  40. for %%b in (mum!bcg%%a!) do (
  41.         set /a n+=1
  42.         set %%b=!%%b! cg%%a
  43. ))
  44. for /l %%a in (1,1,!n!) do set vv=!vv! !mum%%a!&set bcg%%a=&set num%%a=
  45. ::echo; !vv!
  46. ::pause
  47. ::///////要切割规格排序
  48. for %%a in (%vv%) do (
  49.         set vvn=!vv:*%%a=!
  50.         set gnn=!d%%a!
  51.         for /l %%b in (1,1,!lcx!) do (
  52.                 set /a nn=dlc%%b %% d%%a
  53.                 if !nn! lss !gnn! set gnn=!nn!&set gxx=lc%%b
  54.                 for %%c in (!vvn!) do (
  55.                         set /a mm=nn %% d%%c
  56.                         if !mm! lss !gnn! set gnn=!mm!&set gxx=lc%%b %%c
  57. ))
  58. rem 首先切规格最长的,并且配合其它规格,选最省切法
  59. for /f "tokens=1,2" %%b in ("!gxx!") do (
  60.         set/a ##v=d%%b/d%%a,##y=d%%b %% d%%a,##y=##y/d%%c
  61.         
  62.         set/a ##s1=%%an/##v,##s2=##s1,##xy=%%an %% ##v
  63.         set gvv=!d%%a!
  64.         if !##xy! neq 0 (
  65.                 set/a ##k=%%an-##s1*##v
  66.                 set/a ##s1+=1,##k=d%%b-##k*d%%a
  67.                 for %%d in (!vvn! lc1) do (
  68.                         set /a mm=##k %% d%%d
  69.                         if !mm! leq !gvv! set gvv=!mm!&set gxx=%%d
  70.                 )
  71.         )
  72.         set/a ##x1=%%an,##x2=##s2*##y,%%an=0
  73.         set/a #d%%b=##s1+#d%%b,%%cn=%%cn-##x2,#lf1=gnn*##s2
  74.         echo;使用!%%b!米铝材 !##s1!根
  75.         set /p =切成:!%%a!米长!##x1!根,还差0根<NUL
  76.          if !##y! neq 0 (echo;,!%%c!米长!##x2!根,还差!%%cn!根<NUL) echo;
  77.         if !gvv! neq !d%%a! (
  78.         for %%d in (!gxx!) do (
  79.                 echo;二次利用:!##k:~,-%d%!.!##k:~-%d%!米 切得:
  80.                 set/a ##k1=##k/d%%d, ##k2=##k %% d%%d,%%dn=%%dn-##k1
  81.                 echo;        !%%d!米长!##k1!根  还差:!%%dn!根,仍剩:0!##k2:~,-%d%!.!##k2:~-%d%!米
  82.                 set/a #lf1=#lf1+##k2
  83.         ))
  84.         echo;本次浪费:0!#lf1:~,-%d%!.!#lf1:~-%d%!米
  85.         echo;
  86.         set/a #lf=#lf+#lf1
  87. )
  88. )
  89. for /l %%a in (1,1,!lcx!) do (
  90.         echo;共用材料:!lc%%a!米,!#dlc%%a!根
  91. )
  92. echo;共浪费材料:!#lf:~,-%d%!.!#lf:~-%d%!米
  93. pause
  94. exit/b
  95. ::数据定义
  96. 铝材:
  97. 6米
  98. 5.4米
  99. 切割:
  100. 1.8米*10支
  101. 1.5米*20支
  102. 2.2米*30支
  103. 3.1米*15支
复制代码

[ 本帖最后由 netbenton 于 2010-5-26 23:01 编辑 ]
1

评分人数

    • more: 五体投地...PB + 30 技术 + 1

TOP

返回列表