圆环

【题目描述】
在一条水平直线上依次放着N个半径大小不同的圆环(从左到右依次编号为1到N)。每一个圆环跟它的前一个圆环和后一个圆环接触。当顺时针推动第一个环(最左边的环)时,由于摩擦力的作用后面的环依次跟着转动,转动的速度由于半径的不同而不同。
编程确定当第一个环转动一圈时,后面的环各转动了多少圈。注意,转动的圈数不一定正好是整数。
【输入格式】
第 1 行包含一个整数N(3≤N≤100)。
第 2 行包含N个用空格分隔的整数 Ai(1≤Ai≤1000),依次表示第i个环的半径。
【输出格式】
输出文件包含N-1行,第i行包含一个分数A/B,表示第i+1个环转动的圈数,A/B是最简分式。
【样例输入】
4
12 3 8 4
【样例输出】
4/1
3/2
3/1
【分析】
不难想到,每一个圆环转动的长度都是一定的,都等于第一个圆环的周长。
令k为第i个圆环转动的圈数,第一个圆环周长为2πA1,第i个圆环周长为2πAi,列出式子2πA1=2πAik可解得k=A1/Ai
至此这题就变得极其简单了,求出A1和Ai的最大公约数,相除后输出即可。

#include<cstdio>
int gcd(int x,int y){
    if (x%y==0) return y; else return gcd(y,x%y);
}
int main(){
    int n;
    scanf("%d",&n);
    int a[101];
    for (int i=1;i<=n;i++) scanf("%d",&a[i]);
    for (int i=2;i<=n;i++) {
        int g=gcd(a[1],a[i]);
        printf("%d/%d\n",a[1]/g,a[i]/g);
    }
}
posted @ 2016-12-11 10:59  JRX2015U43  阅读(460)  评论(0编辑  收藏  举报