给出方块的个数n,让你排列成一个矩形,并且要求他的表面积最小,问你如何包装
很简单也很笨的算法,就是先找出n的约数,然后进行两层循环,判断是否n%i*j==0,如果等于0,就找到符合的条件
那么就计算此时的表面积,依次枚举出所有情况,然后与min的对比,最后得出答案。
关键是多代码循环的剪枝优化
1 #include<iostream>
2 using namespace std;
3 int main()
4 {
5 int i,j,k,t,n,s,tmp;
6 cin>>t;
7 while(t--)
8 {
9 scanf("%d",&n);
10 s = INT_MAX;
11 i=j=k=1;
12 for(i=1;;++i)
13 {
14 for(j=i;;++j)
15 {
16 if(i*j>n)break;//剪枝,优化
17 if(n%(i*j)==0)
18 {
19 k=n/(i*j);
20 tmp = i*j+j*k+i*k;
21 if(s>tmp)s=tmp;
22 }
23 }
24 if(i*i>n)break;
25 }
26 printf("%d\n",s+s);
27 }
28 return 0;
29 }

浙公网安备 33010602011771号