時間限制: 1sec 記憶體限制: 128mb
題目描述
數學老師給小明出了一道等差數列求和的題目。但是粗心的小明忘記了一 部分的數列,只記得其中 n 個整數。
現在給出這 n 個整數,小明想知道包含這 n 個整數的最短的等差數列有 幾項?
輸入輸入的第一行包含乙個整數 n。 第二行包含n個整數a1,a2,···,an。(注意a1 ∼an並不一定是按等差數
列中的順序給出)
輸出輸出乙個整數表示答案
樣例輸入
52 6 4 10 20
樣例輸出
10提示
對於所有評測用例,2 ≤ n ≤ 100000,0 ≤ ai ≤ 109。
分析:問題一—-無序:題目中說小明所知道的n個數不是有序的,如果直接求答案的話會變得非常困難,所以我們可以將已知的序列通過sort進行排序,這樣得到的就是乙個有序的的數列。
問題二-求最小差值:因為等差數列的定義是a(n)=a(n-1)+d;d為常數,如果要求公差,必然是上述有序數列中後乙個減前乙個最小的值。即d=min(ak-ak-1);
問題三—特殊情況:如果序列是有序的,若序列(任意乙個數ai-最小的那個數a0)%(問題二求得的最小公差d)!=0,那說明這個最小公差是無效的,例如序列:(1,3,8) 此時d=2,但是(8-1)%2!=0;說明這不是它們真實的公差,此時公差為1。最小項數就等於(序列最大值-最小值+1);
最後在輸出項數 m=(amax(即a【n-1】)-amin(a))/d(公差)+1;(這裡加一是因為包含最小的那個數本身)
滿足時候輸出**
//等差數列
#include
#include
#include
#include
#include
using
namespace std;
int n;
int a[
100005];
intmain()
sort
(a,a+n)
;//將陣列利用sort進行排序
int minsize=
10000005
;//求最小差值即公差
for(
int i=
1;iif(minsize==0)
//如果公差為0 輸出n
for(
int i=
1;i)//公差是否是特殊情況
} cout<<
(a[n-1]
-a[0])
/minsize+
1/排除特殊情況後輸出
return0;
}
藍橋杯 2023年第十屆真題 修改陣列
藍橋杯 2019年第十屆真題 修改陣列 時間限制 1sec 記憶體限制 128mb 提交 234 解決 36 題目描述 給定乙個長度為 n 的陣列 a a1,a2,an 陣列中有可能有重複出現 的整數。現在小明要按以下方法將其修改為沒有重複整數的陣列。小明會依次修改 a2,a3,an。當修改 ai ...
2019第十屆藍橋杯C C
這是我第一次參加藍橋杯比賽,比完後,有點低於預期,自己的發揮低於預期,賽事水準也低於預期。教室裡面很多同學的電腦出現問題,舉辦學校也沒有完善的應急方案,有一部分同學11點鐘才可以做題。提取碼 560f1.給20個球員擔任五個不同位置的得分,要你選五個球員組成一支球隊的最大得分。這道題要是全排列做的話...
2019第十屆藍橋盃國賽c B組真題
正確答案還沒出來,有寫 的部分僅屬於自己的見解。持續更新中.請找到兩個正整數x和y滿足下列條件 1 2019思路 直接暴力,sqrt函式會丟失精度,把找到的值再平方一下看看是否構成等差數列,找到的第一對 x,y值為即為答案。include includeusing namespace std int...