【题目描述】 在一条水平直线上依次放着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); } }转载于:https://www.cnblogs.com/JRX2015U43/p/6533473.html
相关资源:JAVA上百实例源码以及开源项目