zoukankan      html  css  js  c++  java
  • POJ 3101 Astronomy

    这仅仅是一个数学题~


    题目大意:

    给出n个星球绕中心天体飞行的周期,求最小执行多少能够让全部的星球在同一条直线上。


    解题思路:

    已知每一个行星的角速度为vi = 2*π/Ti,选择一个行星T0作为坐标系,则其它行星的相对速度为vi' = (T0 - Ti)*2π/(T0*Ti)。则角度绕过半个圆周的时间为Ti' = π/vi' = (T0*Ti)/((T0 - Ti)*2)


    这样就是求全部Ti‘的分子的LCM和全部Ti’分母的GCD。


    注意同样周期的行星和数据范围


    以下是代码:

    import java.math.*;
    import java.util.*;
    public class Main{
        public static void main(String[] args){
            Scanner cin = new Scanner(System.in) ;
            int n=0,cnt;
            int [] t =new int [1005];
            int [] ls =new int [1005];
            BigInteger a,b,g,up = null,down=null;
            while(cin.hasNext()){
            	cnt=1;
            	n=cin.nextInt();
            	for(int i=0;i<n;i++)t[i]=cin.nextInt();
            	Arrays.sort(t,0,n);
            	ls[0]=t[0];
            	for(int i=1;i<n;i++){
            		if(t[i]!=t[i-1])ls[cnt++]=t[i];
            	}
            	for(int i=1;i<cnt;i++){
            		a=BigInteger.valueOf(ls[i]*ls[0]);
            		b=BigInteger.valueOf((ls[i]-ls[0])*2);
            		g=a.gcd(b);
            		if(i==1){
            			up=a.divide(g);
            			down=b.divide(g);
            		}
            		else {
    					a=a.divide(g);
    					b=b.divide(g);
    					up=up.multiply(a).divide(up.gcd(a));
    					down=down.gcd(b);
    				}
            	}
            	System.out.println(up+" "+down);
            }
            cin.close();
        }
    }
    


  • 相关阅读:
    Unity NPOI 无法读取xlsx
    spring源码之—Assert.notNull
    手工Ghost安装系统
    一键GHOST优盘版安装XP/win7系统
    oncontextmenu事件
    Maven 常用配置
    U盘装win7系统
    eval json ajax
    Maven--pom.xml 配置详解
    Maven 构建
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4509467.html
Copyright © 2011-2022 走看看