原题链接:
思维点:
-
假设我们把 所有的数 都减小到与 原数列的最小值 相同,那么题目可以转化为求 除最小值外的所有数 与 最小值 的差值的 最大公约数
-
当所有数相等时,k可以任意大
ac代码:
#include<cstdio>
#include<algorithm>
using namespace std;
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n, a[40];
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
sort(a, a + n);//找到最小值, a[0]
int ans = a[1] - a[0];
for (int i = 2; i < n; i++) {
ans = __gcd(ans, a[i] - a[0]);
}
if(ans == 0) printf("-1\n");
else printf("%d\n", ans);
}
return 0;
}