天真无邪°
C++的一道难题! 求解!!

Description

小六是个吃货,现在是冬天,但是小六想吃西瓜了,没关系,小六是个小女巫,她有办法变出西瓜。但作为一个有追求的女巫,小六对西瓜的要求也是很高的,小六要吃的西瓜形状可以各异,但是西瓜皮的体积一定要够(小六爱吃西瓜皮)。现在有一个西瓜,请你先帮小六看看,她会不会吃这个西瓜。

Input

分3行输入;

第一行:小六最少要吃的西瓜皮的体积V;

第二行:一个字母,代表西瓜外壳的形状(b:球体,c:立方体)一个正数r(形状为b时,代表球体半径;形状为立方体时,代表立方体边长);

第三行:一个字母,代表西瓜内瓤的形状(b:球体,c:立方体)一个正数r(形状为b时,代表球体半径;形状为立方体时,代表立方体边长);

Output

如果西瓜皮的的体积大于V,则输出“YES”,否则输出“NO”;

Sample Input

13

c 3

c 2

Sample Output

YES

HINT

建议数据用double型

wugy315
[i=s] 本帖最后由 wugy315 于
展开Biu

本帖最后由 wugy315 于 2017-11-30 20:53 编辑

其实很简单呀。这是一道时间复杂度只有O(1)的题。

手上没有CPP的IDE。就从算法的角度用Java来提供一种解决方案供参考吧。

public String eatOrNot(double v,char out,double outR,char inside,double insideR) throws Exception{

double vOut,vInside;

switch (out) {

case 'b':

vOut = 4*Math.PI*Math.pow(outR,3)/3;

//Math.PI是java的类库中提供的常量。CPP中没有的话可以作替换。

//Math.pow是java类库中提供的立方计算方法。也可以做相应替换。

break;

case 'c':

vOut = Math.pow(outR, 3);

break;

default:

throw new Exception("小六暂时还变不出这种形状的西瓜呢~");

}

switch (inside) {

case 'b':

vInside = 4*Math.PI*Math.pow(insideR,3)/3;

//Math.PI是java的类库中提供的常量。CPP中没有的话可以作替换。

//Math.pow是java类库中提供的立方计算方法。也可以做相应替换。

break;

case 'c':

vInside = Math.pow(insideR, 3);

break;

default:

throw new Exception("小六暂时还变不出这种形状的西瓜呢~");

}

if ((vOut-vInside)>v) {

return "YES";

}

return "NO";

}

[查看全文]
Blue_sdo
大概思路应该是这样,我没学过C++语法,用
展开Biu

大概思路应该是这样,我没学过C++语法,用js语法为例写的:

窗体设定:

1、输入框a1,输入体积V

2、输入框a2,输入外壳形状字母+分隔符+半径

3、输入框a3,输入内瓤形状字母+分隔符+半径

4、输出框b,输出结果

定义变量,类型转换

volume = a1;

shapeA1 = a2分隔符前;//形状

shapeA2 = a2分隔符后;

shapeB1 = a3分隔符前;//形状

shapeB2 = a3分隔符后;

定义体积函数,传入参数shape,value,以js为例:

funciton getBallVolume(shape,value){

if(shape == "b"){

return Math.pow(value,3); //求立方体体积,返回结果

}

else if(shape == "c"){

return (3/4)*3.1415926*Math.pow(value,3) //求球体体积,返回结果

}

};

定义变量计算体积,和输入的体积对比:

volumeInner = getBallVolume(shapeA1,shapeA2)+getBallVolume(shapeB1,shapeB2);

如果volumeInner > volume,那么输出框b显示YES,否则显示NO

[查看全文]