题解 | #牛牛的水杯#

牛牛的水杯

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

取余两边必须为整数

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务