ACM复习(56)17230 计算轴承半径

Description
轴承是一种十分常见的,在机械传动过程中起固定和减小载荷摩擦系数的部件。也可以说,当其它机件在轴上彼此产生相对运动时,用来降低动力传递过程中的摩擦系数和保持轴中心位置固定的机件。轴承是当代机械设备中一种举足轻重的零部件。
详细可以参考这个链接:http://baike.baidu.com/view/5545.htm?noadapt=1
对于大多数的轴承,它们的基本结构都是一个圆柱体。从柱体的一个面看,每个轴承的轮廓都是由两个同心圆构成,在两个同心圆之间有许多的小圆围绕。其中,调心球轴承就是一个经典的模型。
现在要求轴承里至少要能够放置N个排列在大圆边界内的半径为R的小球(忽略小圆),柱体的底面大圆半径至少要多少?为了精确制造,要求给出的半径必须为整数。

输入格式
第一行输入一个正整数T,表示将要输入的测试数据数量。
接下来有T行,每行输入两个正整数N,R,分别表示小球的个数以及小球的半径。
(T<=100,1<=N,R<=1000)

输出格式
对于每一组测试数据,输出一行”Case X: ”,其中X表示第几组数据,然后是一个整数,表示能够放置全部小球的柱体的底面半径至少是多少。

输入样例
3
2 1
3 2
5 4

输出样例
Case 1: 2
Case 2: 5
Case 3: 11

提示
第一组数据中,要包含2个半径为1的小球,柱体底面半径最少是2。
第二组数据中,要包含3个半径为2的小球,柱体底面半径最少是4.30940。
第三组数据中,要包含5个半径为4的小球,柱体底面半径最少是10.80520。


解题思路

数学水题
注意:result只能是float类型,不然会WA,不知道为什么。。

#include<stdio.h>
#include<math.h>
int main()
{
    int t, n, r, c = 1;
    float result;
    double PI = 3.1415926;
    scanf("%d", &t);

    while(t --)
    {
        scanf("%d %d", &n, &r);
        /*
        注意一个或两个的情况 
        360 / (n * 2) * PI / 180 = PI / n 
        */
        result = n < 3 ? n * r : (r / sin(PI / n) + r);
        printf("Case %d: %.0lf\n", c ++, ceil(result));
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sinat_34200786/article/details/81782466