- 论坛徽章:
- 0
|
我刚刚找到解法了,谢谢!
我的一个解法是:
CD 1: 1.36, 1.36, 1.36, 0.335
CD 2: 1.36, 1.47. 1.53
CD 3: 1.36, 1.37, 1.57
这里需要说明的是我把文件组合的最大值4.4G改大了一点点到4.5G,这样也不会超过一个DVD数据碟的容量。
我用了两个代码的结果相结合的方法,虽然仍然有点笨了,但还是解决了。
第一代码,将十个文件均拆分为四个一组的:
/* calc_x */
#include <stdio.h>
#define SIZE 10
#define MAX 4.5
#define MIN 4.3
int main(void){
float ar[SIZE] = {1.37,1.36,1.53,1.36,0.335,1.47,1.36,1.57,1.36,1.36};
float w,x,y,z;
int g,j,k,m;
for(g = 0; g < SIZE; g++){
w = ar[g];
for(j = 0; j < SIZE; j++){
x = ar[j];
for(k = 0; k < SIZE; k++){
y = ar[k];
for(m = 0; m < SIZE; m++){
z = ar[m];
if(w <= 1.57&&x <= 1.57&&y <= 1.57&&z <= 1.57 &&
w >= .335&&x >= .335&&y >= .335&&z >= .335 &&
(w+x+y+z)> MIN && (w+x+y+z) <= MAX){
printf("\nw = %g, x = %g, y = %g, z = %g",w,x,y,z);
}
}
}
}
}
puts("\nDone!");
getch();
return 0;
}
在这个代码的结果中,我们可以发现,这样拆分是无法顾及到1.47,1.53和1.57这样的“大数”的,然后我想到了三个一包,代码如下:
#include <stdio.h>
#define SIZE 10
#define MAX 4.5
#define MIN 4.3
int main(void){
float ar[SIZE] = {1.37,1.36,1.53,1.36,0.335,1.47,1.36,1.57,1.36,1.36};
float w,x,y;
int g,j,k,m;
for(g = 0; g < SIZE; g++){
w = ar[g];
for(j = 0; j < SIZE; j++){
x = ar[j];
for(k = 0; k < SIZE; k++){
y = ar[k];
if(w <= 1.57&&x <= 1.57&&y <= 1.57&&
w >= .335&&x >= .335&&y >= .335&&
(w+x+y)> MIN && (w+x+y) <= MAX)
printf("\nw = %g, x = %g, y = %g",w,x,y);
}
}
}
puts("\nDone!");
getch();
return 0;
}
在这个代码的结果中,我们仍然找不到1.57的影子。不过这不是问题了,因为我可以在三个一包和四个一包的拆分结果中找到符合实际的两包,剩下的就是第三包,而第三包也不超过DVD碟的上限。 |
|