藍橋杯 2023年第十屆真題 等差數列

2021-10-22 23:54:27 字數 1325 閱讀 9980

時間限制: 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...