您的位置:首页 > 其它

CF 389A:Fox and Number Game

2014-03-06 23:01 387 查看
给定n个数,从这n个数中选取任意两个数做差,并把差赋给其中大的数,重复若干次,直到所有数相等,此时求所有数的和。

这个是辗转相减法的原理,所以用辗转相除法求这n个数的最大公约数,然后乘以n即可。

#include <cstdio>
#include <iostream>
using namespace std;

int num[105] = {0} ;

int gcd(int x , int y) {
return (x % y == 0)? y : gcd(y , x % y) ;
}

int main() {
int n ;
cin >> n ;
for (int i = 0 ; i < n ; i ++) {
cin >> num[i] ;
}

for (int i = 1 ; i < n ; i ++) {
if (num[0] > num[i]) num[0] = gcd(num[0] , num[i]) ;
else if (num[0] < num[i]) num[0] = gcd(num[i] , num[0]) ;
}

cout << num[0] * n << endl ;
return 0 ;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: