
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 于 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";
}
大概思路应该是这样,我没学过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
[查看全文]