7216:Minecraft题解

来源:互联网 发布:java前端面试 编辑:程序博客网 时间:2024/04/20 06:56

7216:Minecraft

总时间限制: 

1000ms

 

内存限制: 

65536kB

描述

Minecraft是一个几乎无所不能的沙盒游戏,玩家可以利用游戏内的各种资源进行创造,搭建自己的世界。

Minecraft中,基本的建筑元素是边长为1个单位的立方体,Tony想用N个这种小立方体搭建一个长方体,并用他珍藏已久的贴纸对其进行装饰。如果一张贴纸可以贴满小立方体的一个面。那么,他需要用掉多少张贴纸呢?

输入

一个整数N,表示小明所拥有的小立方体的个数。N不会超过1000。

输出

一个整数,即小明最少用掉的贴纸有多少张。

样例输入

9

样例输出

30

 题解:

由题可知:

1.此题应当使用枚举算法;

2.此题需要用到长方形表面积公式

     

3.由此我们就可以求出表面积为M

4.根据上面的内容,我们就可以知道应该用双重循环来确定长方体的长a、宽b

5.又因为,输入时我们输入了边长为1的立方体的个数,所以呢我们就可以求出长方体的边高为c;

6.因为ab俩数有可能并不是互质数,所以我们就需要一个变量x来储存ab两数的乘积;

7.但是,我们会发现用上述方法时宽c会出现非整数,这时我们就可以用continue;函数直接跳过这次循环,即:

if(x!=0)

continue;

8.当然有时X候有可能超过了n这是,我们就需跳出循环,即:

if(x>n)

break;

9.最后呢我们就可以用变量min来储存最小的M

10.但是min需要设置一个初始值即最大值为4002

 

11.最后,我们就可以输出min了。

函数如下:

#include<cstdio>

int main()

{

int n,a,b,c,m,min=4002,x;

scanf("%d",&n);

for(a=1;a<=n;a++)

{

for(b=1;b<=n;b++)

{

x=a*b;

if(n%x!=0)

continue;

if(x>n)

break;

c=n/a/b;

m=a*c*2+a*b*2+b*c*2;

if(m<min)

min=m;

}

}

printf("%d",min);

}

1 0