兩道經典演算法題 吉位元2017秋招筆試

2022-08-25 00:15:10 字數 1598 閱讀 3046

閱讀目錄

回到頂部

輸入m、n,1 < m < n < 1000000,求區間[m,n]內的所有素數的個數。素數定義:除了1以外,只能被1和自己整除的自然數稱為素數

輸入描述:

兩個整數m,n
輸出描述:
區間內素數的個數
示例1

輸入

2 10
輸出

4

#include#define k 1000001 using

namespace

std;

char p[k+1] = ; //

陣列前三個數 0 1 2 分別為 合數、合數、素數

intmain()

intm,n,count; cin>>m; cin>>n; count=0

;

for(i=m; i<=n; i++)

if(!p[i]) //

如果p[i]為合數,則跳過,如果為素數,執行count count++; cout

<

分析:由素數的概念在大於1的整數中,只能被1和自己本身整除的數。

在大於1的整數中,只要類似 m*n 得到的數都不是素數。用 1 表示非素數,用 0 表示素數。則: p[i*j] = 1 即為找出所有的非素數。

k/10 是為了防止 p[i*j] 越界,當然除以20、30也是可以的!

【模板小程式】求小於等於n範圍內的質數

牛客網解答

回到頂部

給定乙個未排序的數列,找到此數列在已排序狀態下的兩個相鄰值的最大差值,少於兩個值時返回0。例如:給定數列 [1,3,2,0,1,6,8] 則 最大差值為3。注意:請盡量使用時間複雜度為o(n)的方案。

輸入描述:

第一行輸入單個整數n作為數列的大小,第二行輸入所有數列中的元素m,共n個。0 < n <= 1000000, 0 < m < 2100000000

輸出描述:
數列的最大差值
示例1

輸入

3 1 10 5
輸出

5

#include #include 

#include

using

namespace

std;

intmain() sort(array.begin(),array.end());

//先排序 vector chazhi(n); //

開乙個陣列,存入相鄰元素差值 chazhi[0] = 0; //

陣列初始化

int max_chazhi = 0

;

for(int i=1;i

return

0; }

分析:研究了一下別人的**,整體思路就是先對輸入的數列進行從小到大的排序,接著建立乙個陣列,存入排序後相鄰兩個數之間的差值,接著再挨個比較大小,最後輸出最大差值。

兩道LIS經典題

題意 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不能攔截所有的飛彈。輸入飛彈依次飛來的高度 雷...

兩道面試演算法題

最近面試 兩道演算法題 說難不難 要寫全對也不容易 很慚愧 我沒有一次寫對 第一道 無序int陣列 找到中位數 void swap int a,int b int get kth number vector num,int k,int start,int end 一次劃分結束 index i if ...

兩道貪心演算法題

假設有n項物品,大小分別為s 1 s 2 s i sn 其中s i為滿足1 s i 100的整數。要把這些物品裝入到容量為100的一批箱子 序號1 n 中。裝箱方法是 對每項物品,順序掃瞄箱子,把該物品放入足以能夠容下它的第乙個箱子中。請寫乙個程式模擬這種裝箱過程,並輸出每個物品所在的箱子序號,以及...