题目:codeforces 389A
Fox Ciel is playing a game with numbers now.
Ciel has n positive integers: x1, x2, ..., xn. She can do the following operation as many times as needed: select two different indexes iand j such that xi > xj hold, and then apply assignment xi = xi - xj. The goal is to make the sum of all numbers as small as possible.
Please help Ciel to find this minimal sum.
The first line contains an integer n (2 ≤ n ≤ 100). Then the second line contains n integers: x1, x2, ..., xn (1 ≤ xi ≤ 100).
Output a single integer — the required minimal sum.
2 1 2
2
3 2 4 6
6
2 12 18
12
5 45 12 27 30 18
15
In the first example the optimal way is to do the assignment: x2 = x2 - x1.
In the second example the optimal sequence of operations is: x3 = x3 - x2, x2 = x2 - x1.
分析:求n个数的最大公约数,再乘以n。
代码:(java)
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n;
n = in.nextInt();
int[] a = new int[n];
for(int i = 0; i < n; i++)
a[i] = in.nextInt();
int ngcd = ngcd(a, n);
int sum = ngcd * n;
System.out.println(sum);
in.close();
}
public static int gcd(int a, int b){
if(a < b)
{
int temp = a;
a = b;
b = temp;
}
if(b == 0)
return a;
else
return gcd(b, a%b);
}
public static int ngcd(int[] a, int n){
if(n == 1)
return a[0];
else
return gcd(a[n-1], ngcd(a, n-1));
}
}