2019第十屆藍橋杯H等差數列


試題 H: 等差數列
時間限制: 1.0s 內存限制: 256.0MB 本題總分:20 分
【問題描述】
數學老師給小明出了一道等差數列求和的題目。但是粗心的小明忘記了一
部分的數列,只記得其中 N 個整數。
現在給出這 N 個整數,小明想知道包含這 N 個整數的最短的等差數列有
幾項?
【輸入格式】
輸入的第一行包含一個整數 N。
第二行包含 N 個整數 A 1 ,A 2 ,··· ,A N 。(注意 A 1 ∼ A N 並不一定是按等差數
列中的順序給出)
【輸出格式】
輸出一個整數表示答案。
【樣例輸入】
5
2 6 4 10 20
【樣例輸出】
10
【樣例說明】
包含 2、6、4、10、20 的最短的等差數列是 2、4、6、8、10、12、14、16、
18、20。

【評測用例規模與約定】
對於所有評測用例,2 ≤ N ≤ 1000000 ≤ A i ≤ 10^ 9 。//數組的maxn設置為100010,設置為int型

分析

①因為題目給出的是無序的,所以要用sort函數進行排序;

②求出最小公差,計算從首相加到尾項需要加多少公差即可。

 1 #include<bits/stdc++.h> 
 2 using namespace std;
 3 const int maxn=100010;
 4 int main(){
 5     int n;
 6     int a[maxn] ;
 7     scanf("%d",&n);
 8     //讀入數據並排列 
 9     for(int i=0;i<n;i++){
10         scanf("%d",&a[i]);
11     }
12     sort(a,a+n); 13     //求公差 
14     int d=a[1]-a[0];
15     for(int i=2;i<n;i++){
16         int t=a[i]-a[i-1];
17         if(t<d) d=t;
18     }
19     //求項數
20     int ans=1;
21     while(a[0]!=a[n-1]){
22         a[0]+=d;
23         ans++;
24     } 
25     printf("%d",&ans);
26 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM