AcWing 1246. 等差数列(C语言)
原题链接
中等
作者:
Belous
,
2020-02-25 16:41:18
,
所有人可见
,
阅读 935
C 代码
#include <stdio.h>
#include <stdlib.h>
int compare_fun(const void *a, const void *b)
{
const int *aa = a, *bb = b;
if (*aa > *bb)
return 1;
return 0;
}
int gcd(int a,int b)
{
return b ? gcd(b, a % b) : a;
}
int main(void)
{
int n, *arr;
scanf("%d", &n);
arr = (int *)malloc(100000 * sizeof(int));
for (int i = 0; i != n; ++i)
scanf("%d", &arr[i]);
qsort(arr, n, sizeof(int), compare_fun);
int ans = arr[1] - arr[0];
for (int i = 2; i != n; ++i)
ans = gcd(ans, arr[i] - arr[0]);
if(!ans)
printf("%d\n", n);
else
printf("%d\n", (arr[n - 1] - arr[0]) / ans + 1);
free(arr);
return 0;
}