整齐的数组 - 题目 - Daimayuan Online Judge
每一次可以选择一个ai减去k,可以进行若干次操作,使得所有数变相同
说明跟顺序无关,可以从小到大排个序,k大于等于1,说明了每个数只能变小不能变大,那么每个数只能变得和最小的那个数一样大,那么求出所有的其它数和最小的那个数的差值,求最大公约数就行
当然,还有一种情况,要想k任意大,那么所有数相等
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 50;
int a[N];
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
int main()
{
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
sort(a + 1, a + 1 + n);
bool flag = true;
for (int i = 2; i <= n; i++) {
if (a[i] != a[i - 1]) flag = false;
}
if (flag) cout << -1 << endl;
else {
int m = a[n] - a[1];
for (int i = 2; i < n; i++) {
m = gcd(m, a[n] - a[i]);
}
cout << m << endl;
}
}
return 0;
}