- 注册时间
- 2015-6-20
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 53
- 在线时间
- 小时
|
发表于 2015-6-21 11:09:23
|
显示全部楼层
#include "stdio.h"
#include "stdlib.h"
main()
{ int i,n,m; float t;
int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11;
FILE *fp;
if((fp=fopen("data1.txt","w+"))==NULL)
{printf("Can not open file\n");
exit(0);
}
for(t=0.001;t<=1;t=t+0.001)/*t为每箱重量,以1kg为步进,到1吨为止,遍历所有的箱重可能*/
{n=(int)(36/t);/*n为货物总的箱子数量*/
m=(int)(4/t);/*m为一辆车最多能装的箱子数量*/
fprintf(fp,"n=%d,m=%d\n",n,m);
for(a1=1;a1<=m;a1++)/*a1-a11为每辆车的编号,从1箱到m箱尝试*/
for(a2=0;a2<=m;a2++)
for(a3=0;a3<=m;a3++)
for(a4=0;a4<=m;a4++)
for(a5=0;a5<=m;a5++)
for(a6=0;a6<=m;a6++)
for(a7=0;a7<=m;a7++)
for(a8=0;a8<=m;a8++)
for(a9=0;a9<=m;a9++)
for(a10=0;a10<=m;a10++)
for(a11=0;a11<=m;a11++)
if((a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11)==n)
{ fprintf(fp,"t=%f\n",t);
i++;/*i记录答案的个数*/
fprintf(fp,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n\n",a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
}
}fprintf(fp,"i=%d",i);
fclose(fp);
}
不得不说这个算法的计算量实在太大,在2.7GHz的pentium g630上计算20分钟无果。
然后我只能指定每箱重0.507吨时的情况。
#include "stdio.h"
#include "stdlib.h"
main()
{ int i,n,m; float t;
int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11;
FILE *fp;
if((fp=fopen("data1.txt","w+"))==NULL)
{printf("Can not open file\n");
exit(0);
}
t=0.507;
n=(int)(36/t);
m=(int)(4/t);
fprintf(fp,"n=%d,m=%d\n",n,m);
for(a1=1;a1<=m;a1++)
for(a2=0;a2<=m;a2++)
for(a3=0;a3<=m;a3++)
for(a4=0;a4<=m;a4++)
for(a5=0;a5<=m;a5++)
for(a6=0;a6<=m;a6++)
for(a7=0;a7<=m;a7++)
for(a8=0;a8<=m;a8++)
for(a9=0;a9<=m;a9++)
for(a10=0;a10<=m;a10++)
for(a11=0;a11<=m;a11++)
if((a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11)==n)
{ i++;
fprintf(fp,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n\n",a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
}
fprintf(fp,"i=%d",i);
fclose(fp);
}
当每箱重0.507吨时,有2301572种组合,难怪会有这么大的计算量。
n=71,m=7
t=0.507000
1,7,7,7,7,7,7,7,7,7,7
t=0.507000
2,6,7,7,7,7,7,7,7,7,7
t=0.507000
2,7,6,7,7,7,7,7,7,7,7
t=0.507000
2,7,7,6,7,7,7,7,7,7,7
t=0.507000
2,7,7,7,6,7,7,7,7,7,7
t=0.507000
2,7,7,7,7,6,7,7,7,7,7
t=0.507000
2,7,7,7,7,7,6,7,7,7,7
t=0.507000
2,7,7,7,7,7,7,6,7,7,7
补充内容 (2015-10-24 23:14):
程序第四行应改为int i=0,n,m; float t;
计算结果为:每箱重0.507吨时,有8008种组合. |
|