圆环

#include<iostream>
#include<cstdio> 
using namespace std;
int n,a[10000000];
int q,w;
int first;
int box;
int gcd(int x,int y)
{
    if (x%y==0) return y; 
    return gcd(y,x%y); 
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    first=a[1];
    q=first;
    for(int i=2;i<=n;i++)
    {
        w=a[i];
        cout<<first/gcd(q,w)<<"/"<<a[i]/gcd(q,w)<<endl;
    }
    return 0;
}

(利用欧几里得辗转相除法求出最大公约数)

题目描述

在一条水平直线上依次放着N个半径大小不同的圆环(从左到右依次编号为1到N)。每一个圆环跟它的前一个圆环和后一个圆环接触(除第一个和最后一个),如下图所示。

Failed to load picture

当顺时针推动第一个环(最左边的环)时,由于摩擦力的作用后面的环依次跟着转动,转动的方向如上图所示,转动的速度由于半径的不同而不同。

编程确定当第一个环转动一圈时,后面的环各转动了多少圈。注意,转动的圈数不一定正好是整数。

输入输出格式

输入格式:

两行, 第一行包含一个整数N(3≤N≤100)。

第二行包含N个用空格分隔的整数Ai(1≤i≤N,1≤Ai≤1000),依次表示第i个环的半径。

输出格式:

N-1行,第i行包含一个分数A/B,表示第i+1个环转动的圈数,A/B是最简分式(即A和B没有比1大的公约数,不能再约分)。

输入输出样例

输入样例一:
3 
8 4 2
输出样例一:
2/1
4/1
输入样例二:
4
12 3 8 4
输出样例二:
4/1 
3/2 
3/1
输入样例三:
4
300 1 1 300
输出样例三:
300/1
300/1
1/1

说明

数据规模:

对于20%的数据,保证:3≤N≤10;

对于40%的数据,保证:3≤N≤30;

对于60%的数据,保证:3≤N≤50;

对于80%的数据,保证:3≤N≤90;

对于100%的数据,保证:3≤N≤100,1≤Ai≤1000。

(递归练习题qwq)
posted @ 2019-04-17 13:42  AK大佬  阅读(290)  评论(0编辑  收藏  举报