题解 | #牛牛的水杯#
牛牛的水杯
https://www.nowcoder.com/practice/c196c47c23394bf3bdd4f82a838df6bf
#include<stdio.h> int main() { int h,r,a;//定义整型杯子的高度和底面半径r,a为杯数 scanf("%d %d",&h,&r);//输入高度和半径 double v;//定义杯子体积,因为要乘3.14所以有很大可能是小数,用double范围更广精度更高 v=3.14*h*r*r;//计算杯子体积 a=(int)(10000.0/v);//1升水=1000立方厘米,10升水=10000立方厘米, //之所以是10000.0而不是10000,是因为10000.0为分数,10000是整数, //v有可能是分数也有可能是整数,但整数相除,结果只保留整数部分, //但我们要精确的分数, //所以考虑这个情况,用10000.0,分数除以整数或分数,结果都是分数形式 //(int)强制转换类型为整型,只保留整数部分 //之所以用它,是因为几杯水得是整数,没有几点几杯水 printf("%d",10000.0/v==a?a:a+1);//算杯数存在两种情况,一种10000刚好是v的整数倍,那a=10000.0/v //另一种情况,10000不是v的整数倍, //那a=(int)(10000.0/v)仅保留了整数部分 //实际至少需要的杯数要在此基础上加1,才能把10升水喝完 //三目运算符:判断条件?a:b,若判断条件为真,输出a,为假,输出b return 0; }//之所以不用取余来判断10000是不是v的整数倍,是因为%两边要求均为整数,但v有可能为分数,也有可能为整数,强制转换的话,那算的也是10000是不是v的整数部分的整数倍
总结:
强制转换,在要强制转换数的前面加就行
整数相除得整数
三目运算符:判断条件?a:b
取余两边必须为整数