[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
代码没有优化:
  1. @echo off
  2. for /f "tokens=1* delims=*" %%a in ('more +30^<"%~fs0"') do call:hanye %%a %%b
  3. pause&exit
  4. :hanye
  5. setlocal enabledelayedexpansion
  6. set n=%1&set m=%2&set n=!n:~0,-1!&set m=!m:~0,-1!&set n=!n:.=!
  7. :s60
  8. set/a n_60+=1
  9. set/a y_60_!n_60!=60-n*n_60,k_60=n_60,x_60_!n_60!=1
  10. if !y_60_%n_60%! geq %n% goto:s60
  11. set/a n_60+=1,y_60_0=y_60_!k_60!,v_60=2
  12. for /l %%a in (%n_60%,1,%m%) do (set/a n_60=%%a,y=%%a%%k_60,w_60+=1
  13. set/a y_60_%%a=y_60_!y!
  14. 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!)
  15. set/a y_60_0=0,x_60_0=0
  16. :s54
  17. set/a n_54+=1
  18. set/a y_54_!n_54!=54-n*n_54,k_54=n_54,x_54_!n_54!=1
  19. if !y_54_%n_54%! geq %n% goto:s54
  20. set/a n_54+=1,y_54_0=y_54_!k_54!,v_54=2
  21. for /l %%a in (%n_54%,1,%m%) do (set/a n_54=%%a,y=%%a%%k_54,w_54+=1
  22. set/a y_54_%%a=y_54_!y!
  23. 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!)
  24. set/a y_54_0=0,x_54_0=0
  25. for /l %%a in (0,1,%m%) do (set/a b=m-%%a
  26. set/a z_%%a=y_60_%%a+y_54_!b!)
  27. 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
  28. set/a b=m-a
  29. echo.%1*%2:需要6米的铝材 !x_60_%a%! 根;需要5.4米的铝材 !x_54_%b%! 根.
  30. Endlocal&goto:eof
  31. 1.8米*10支
  32. 1.5米*20支
  33. 2.2米*30支
  34. 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 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

以1.0米分别分割10支、11支、12支、13支时,结果如下:
10支时需要6米的铝材 0 根;需要5.4米的铝材 2 根.
11支时需要6米的铝材 1 根;需要5.4米的铝材 1 根.
12支时需要6米的铝材 2 根;需要5.4米的铝材 0 根.
13支时需要6米的铝材 0 根;需要5.4米的铝材 3 根.

[ 本帖最后由 hanyeguxing 于 2010-5-25 03:10 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 7楼 的帖子

4楼的代码仅是分割一种的情况,没有去处理四种情况同时存在。楼主也没做这个说明。

[ 本帖最后由 hanyeguxing 于 2010-5-25 03:21 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 xxx3212 于 2010-5-24 20:41 发表
铝材长度 6米 和 5.4米
1.8米*10支
1.5米*20支
2.2米*30支
3.1米*15支

计算出最佳切割方法

1,楼主没有说明1.8、1.5、2.2、3.1是分别计算,还是统一计算。4楼代码是按分别计算设计的。
2,
原帖由 xxx3212 于 2010-5-25 08:38 发表
你的算法太简单了 只是计算同样的材料切割需要多少支 BAT如果能写出来 那真是神了
楼主这里说的“同样的材料”是什么意思?是第一条里的,还是指4楼的代码没有统一计算6米和5.4米的使用?如果是后者,那推荐楼主还是把4楼的代码看完整了再说。
3,4楼代码的设计思路:

1,定义单根范围内6米的分割余数
2,定义最大范围内6米的分割余数
3,定义单根范围内5.4米的分割余数
4,定义最大范围内5.4米的分割余数
5,统计只使用6米只使用5.4米同时使用6米和5.4米时的余数
6,比较余数
7,获取最小余数时的分割
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表