Java程序练习-高中运动会

来源:互联网 发布:房地产的软件 编辑:程序博客网 时间:2024/04/29 17:11
高中运动会
时间限制: 10000ms内存限制: 2048kB
描述
梦幻城市每年为全市高中生兴办一次运动大会。为促进各校同学之间的交流,采用特别的分队方式:每一个学校的同学,必须被均匀分散到各队,使得每一队中该校的人数皆相同。为增加比赛的竞争性,希望分成越多队越好。你的任务是由各校的人数,决定最多可分成的队数。
输入
输入文件第一行为一个正整数N,代表学校的个数。接下来有N行,每行为一个正整数,分别代表这N个学校的人数。
输出
最多可分成的队数。
样例输入
3
12
16
20
样例输出
4
提示
学校数不超过500,每个学校人数最多为10000.
分析
求最大公约数
参考代码
/* * Title  :High school sports meeting * From   :http://nnsznoi.openjudge.cn/nnsz2011/1/ * Time   :2011-10-13 22:00PM * Author :Eric Zhou,binfeihan * Email  :binfeihan@126.com * Blog   :http://blog.csdn.net/binfeihan */import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main {public static void main(String[] args) throws IOException{BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));int n = Integer.parseInt(cin.readLine().trim());int i,p[] = new int[n];for(i = 0;i < n;++ i)p[i] = Integer.parseInt(cin.readLine().trim());System.out.println(findmaxgcd(p,n));}private static int findmaxgcd(int[] p, int n) {int max = 10000,v = 0;for(int i = 0;i < n - 1;++ i){for(int j = i + 1;j < n;++ j){v = gcd(p[i],p[j]);if(v < max)max = v;}}return max;}private static int gcd(int a,int b){int max = Math.max(a, b);int min = Math.min(a, b);int mod = max % min;if(mod == 0)return min;elsereturn gcd(mod,min);}}
原创粉丝点击