Java程序练习-高中运动会

高中运动会
时间限制: 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;
		else
			return gcd(mod,min);
	}
}
作者:binfeihan 发表于2011-10-14 10:34:46 原文链接
阅读:117 评论:1 查看评论
posted @ 2011-10-14 10:35  技术就是力量  阅读(313)  评论(0)    收藏  举报