需要一些纸圈,数据如下:(内径/外径,数量)
1552/2616,3
2075/2423,6
2075/2423,3
2053/2423,3
1985/2423,3
1877/2039,6
1867/1905,3
1719/1855,12
1553/1855,3
1553/1855,3
1553/1689,12
1404/1538,3
1364/1470,3
1404/1468,3
1403/1469,6
1403/1469,6
我们套裁时用大圈的内径套小圈的外径,大圈的内径比小圈的外径至少大于10以上,数量对应逐级套裁,直到套不出为止.将直接下料的纸圈从大到小放到第一列,第二列空出,第三列为二次套裁的纸圈,第四列为三次套裁的纸圈,依次类推.结果如下:
1552/2616,3
2075/2423,6 1877/2039,6
2075/2423,3 1867/1905,3 1404/1538,3
2053/2423,3 1553/1855,3 1364/1470,3
1985/2423,3 1553/1855,3 1404/1468,3
1719/1855,12 1553/1689,12 1403/1469,6
1403/1469,6
请问,如何设计数据结构,每一组数据我用的是结构体数组,数量必须对应,如何相等好处理,如果不等,还要拆分,如何实现?当我判断符合套裁时,如何将它写到后面去?请高人指点迷津.
------解决方案--------------------
大约这个思路,写个函数做递归
f_find(string ls_all,int startrow)
int i,rowcount
int il_in,il_out,il_count
int il_in_c,il_out_c,il_count_c
string ls_n,ls_n_c
ls_n=this.getitemstring(startrow,"纸圈")
il_in=integer(left(ls_n,pos(ls_n,'/')-1))
il_out=integer(mid(ls_n,pos(ls_n,'/')+1,pos(ls_n,',') -1))
il_in=integer(right(ls_n),len(ls_n)-pos(ls_n,','))
for i=startrow+1 to rowcount
ls_n_c=this.getitemstring(startrow,"纸圈")
il_in_c=integer(left(ls_n_c,pos(ls_n_c,'/')-1))
il_out_c=integer(mid(ls_n_c,pos(ls_n_c,'/')+1,pos(ls_n_c,',') -1))
il_in_c=integer(right(ls_n_c),len(ls_n_c)-pos(ls_n_c,','))
if il_out_c+10<il_in then
ls_all=ls_n+ls_n_c
f_find(string ls_all,int i,startrow,rowcount)
end if
next
------解决方案--------------------
算出来是这个结果呢:
代码这样:
- C/C++ code
int i, kfor i = 1 to dw_1.rowcount() string ls_data ls_data = dw_1.object.s1[i] dw_1.object.ri[i] = integer(left(ls_data,pos(ls_data,'/')-1)) dw_1.object.ro[i] = integer(mid(ls_data,pos(ls_data,'/')+1,pos(ls_data,',') - 1 - pos(ls_data,'/') )) dw_1.object.nu[i] = integer(right(ls_data ,len(ls_data)-pos(ls_data,','))) nexti =1string ls_result[]int ri,ro,li_on, li_infor i = 1 to dw_1.rowcount() if dw_1.object.nu[i] = 0 then continue ls_result[i] = dw_1.object.s1[i] ri = dw_1.object.ri[i] li_on = dw_1.object.nu[i] for k = i+1 to dw_1.rowcount() if dw_1.object.nu[k] = 0 then continue ro = dw_1.object.ro[k] li_in = dw_1.object.nu[k] if ri - ro > 10 and li_in>=li_on then ls_result[i] = ls_result[i]+' , ' + dw_1.object.s1[k] ri = dw_1.object.ri[k] dw_1.object.nu[k] = dw_1.object.nu[k] - li_on end if next dw_2.object.sr[dw_2.insertrow(0)] = ls_result[i] next
------解决方案--------------------
你再看看代码吧.
dw_1.object.nu[k] = dw_1.object.nu[k] - li_on
是计算该行的剩余数量的.
关于结果集中数量不一样的问题,这个你只要改写一下:
ls_result[i] = ls_result[i]+' , ' + dw_1.object.s1[k]
就可以了.