第十屆藍橋杯省賽C++B組 等差數列

“黎明”發表於2020-10-04

第十屆藍橋杯省賽C++B組 等差數列

ryo_218 2019-03-26 23:33:19 1210 收藏 1
分類專欄: 藍橋杯
版權
試題 H:等差數列

時間限制:1.0s 記憶體限制:256.0MB 本題總分:20 分

【問題描述】

   數學老師給小明出了一道等差數列求和的題目。但是粗心的小明忘記了一 部分的數列,只記得其中 N 個整數。
   現在給出這 N 個整數,小明想知道包含這 N 個整數的最短的等差數列有幾項?

【輸入格式】

   輸入的第一行包含一個整數 N。
   第二行包含 N 個整數 A1,A2,··· ,AN。(注意 A1~AN 並不一定是按等差數列中的順序給出)

【輸出格式】

   輸出一個整數表示答案。

【樣例輸入】

5
2 6 4 10 20

【樣例輸出】

10

【樣例說明】

    包含 2、6、4、10、20 的最短的等差數列是 2、4、6、8、10、12、14、16、 18、20。

說明:不要忘了常數列,需要考慮全面。

#include<bits/stdc++.h>
using namespace std;
int a[9000000],b[9000000];
int main()
{
	int i,n;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>a[i];
	} 
	sort(a,a+n);
	int f=0;
	for(i=0;i<n-1;i++)
	{
		b[i]=a[i+1]-a[i];
		if(b[i]==0)
		f=1;
	}
	sort(b,b+n-1);
	int m=999999999;
	for(i=0;i<n-1;i++)
	{
		m=min(m,__gcd(b[i],b[i+1]));
	}
	if(f==1)
	cout<<n;
	else
	cout<<(a[n-1]-a[0])/m+1;
} 

相關文章