本人遇到一个问题:
仓库收获到了一批货物,每个货物收获数量在0到10之间,必为整数。已知货物单价清单如下:
55413.15,
34039.78,
29854.21,
38571.93,
31912.76,
44664.79,
67553.03,
61702.58,
83413.72,
92970.95,
279503.02,
265720.62,
60921.02,
117565.85,
35437.71,
34207.97,
56721.39,
104887.20,
26382.89,
56469.38,
97670.43,
59153.45
现收到发票一张,不知道发票上面对应哪些收获,但是知道总金额为1365461.06.现在需要知道哪些货物收了几个可以达到这张发票的金额?(收获数量)
我大概想了下要用C语言实现的话要嵌套22层循环,但是苦于C语言是好多年前学过的了,现在也不知道怎么写。想请问下有没有人可以帮忙写一下代码,或者帮我执行一下给我结果。谢谢!
C语言根据总金额查询收获数量
答案:4 悬赏:0
解决时间 2021-12-13 11:58
- 提问者网友:她是我的お女人
- 2021-12-13 05:33
最佳答案
- 二级知识专家网友:末路丶一枝花
- 2021-12-13 07:09
我帮你写,稍等半小时
结果出来了
Local optimal solution found.
Objective value: 0.000000
Extended solver steps: 15733
Total solver iterations: 234367
Variable Value Reduced Cost
N( N1) 1.000000 0.000000
N( N2) 2.000000 0.000000
N( N3) 1.000000 0.000000
N( N4) 2.000000 0.000000
N( N5) 1.000000 0.000000
N( N6) 2.000000 0.000000
N( N7) 2.000000 0.000000
N( N8) 0.9999475 0.000000
N( N9) 0.9999290 0.000000
N( N10) 1.000000 0.000000
N( N11) 0.000000 0.000000
N( N12) 0.000000 0.000000
N( N13) 0.9999482 0.000000
N( N14) 0.9999257 0.000000
N( N15) 2.000000 0.000000
N( N16) 2.000000 0.000000
N( N17) 1.000000 0.000000
N( N18) 0.000000 0.000000
N( N19) 2.000000 0.000000
N( N20) 1.000000 0.000000
N( N21) 1.000000 0.000000
N( N22) 0.9999497 0.000000
sets:
s/n1..n22/:n,value;
endsets
data:
value =55413.15
34039.78
29854.21
38571.93
31912.76
44664.79
67553.03
61702.58
83413.72
92970.95
279503.02
265720.62
60921.02
117565.85
35437.71
34207.97
56721.39
104887.20
26382.89
56469.38
97670.43
59153.45;
enddata
min =@abs(@sum(s:n*value)-1365461.06);
@for(s(i):
@gin(n(i));
n(i)>=0;
n(i)<=10;
);
结果出来了
Local optimal solution found.
Objective value: 0.000000
Extended solver steps: 15733
Total solver iterations: 234367
Variable Value Reduced Cost
N( N1) 1.000000 0.000000
N( N2) 2.000000 0.000000
N( N3) 1.000000 0.000000
N( N4) 2.000000 0.000000
N( N5) 1.000000 0.000000
N( N6) 2.000000 0.000000
N( N7) 2.000000 0.000000
N( N8) 0.9999475 0.000000
N( N9) 0.9999290 0.000000
N( N10) 1.000000 0.000000
N( N11) 0.000000 0.000000
N( N12) 0.000000 0.000000
N( N13) 0.9999482 0.000000
N( N14) 0.9999257 0.000000
N( N15) 2.000000 0.000000
N( N16) 2.000000 0.000000
N( N17) 1.000000 0.000000
N( N18) 0.000000 0.000000
N( N19) 2.000000 0.000000
N( N20) 1.000000 0.000000
N( N21) 1.000000 0.000000
N( N22) 0.9999497 0.000000
sets:
s/n1..n22/:n,value;
endsets
data:
value =55413.15
34039.78
29854.21
38571.93
31912.76
44664.79
67553.03
61702.58
83413.72
92970.95
279503.02
265720.62
60921.02
117565.85
35437.71
34207.97
56721.39
104887.20
26382.89
56469.38
97670.43
59153.45;
enddata
min =@abs(@sum(s:n*value)-1365461.06);
@for(s(i):
@gin(n(i));
n(i)>=0;
n(i)<=10;
);
全部回答
- 1楼网友:如果这是命
- 2021-12-13 10:10
好像很高端的样子
- 2楼网友:萝莉姐姐鹿小北
- 2021-12-13 10:03
#include
void main()
{
char piece[22]={0},index=0;
float price[22]={55413.15,34039.78,29854.21,38571.93,31912.76,44664.79,67553.03,61702.58,83413.72,92970.95,279503.02,265720.62,60921.02,117565.85,35437.71,34207.97,56721.39,104887.20,26382.89,56469.38,97670.43,59153.45};
float sum=0.0;
for(piece[0]=0;piece[0]<10;piece[0]++)
for(piece[1]=0;piece[1]<10;piece[1]++)
for(piece[2]=0;piece[2]<10;piece[2]++)
for(piece[3]=0;piece[3]<10;piece[3]++)
for(piece[4]=0;piece[4]<10;piece[4]++)
for(piece[5]=0;piece[5]<10;piece[5]++)
for(piece[6]=0;piece[6]<10;piece[6]++)
for(piece[7]=0;piece[7]<10;piece[7]++)
for(piece[8]=0;piece[8]<10;piece[8]++)
for(piece[9]=0;piece[9]<10;piece[9]++)
for(piece[10]=0;piece[10]<10;piece[10]++)
for(piece[11]=0;piece[11]<10;piece[11]++)
for(piece[12]=0;piece[12]<10;piece[12]++)
for(piece[13]=0;piece[13]<10;piece[13]++)
for(piece[14]=0;piece[14]<10;piece[14]++)
for(piece[15]=0;piece[15]<10;piece[15]++)
for(piece[16]=0;piece[16]<10;piece[16]++)
for(piece[17]=0;piece[17]<10;piece[17]++)
for(piece[18]=0;piece[18]<10;piece[18]++)
for(piece[19]=0;piece[19]<10;piece[19]++)
for(piece[20]=0;piece[20]<10;piece[20]++)
for(piece[21]=0;piece[21]<10;piece[21]++)
{
for(index=0;index<22;index++)
sum+=price[index]*piece[index];
if(sum==1365461.06)
for(index=0;index<22;index++)
printf("%f\t",piece[index]);
}
if(piece[21]==10)
printf("\ncan not get piece!!");
getchar();
}
这么大的运算量,这种算法不好,普通的机子运行(感觉就是超级计算机也要运行很久)要10^22次方,感脚就是不可行,找一些快速的算法吧,建议
纯手打,没运行结果(机子运行不了这么久),非copy,望采纳^-^
- 3楼网友:错过的是遗憾
- 2021-12-13 08:39
看看我写的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯