PAT乙級練習題B1045 快速排序

2021-07-14 18:17:45 字數 1682 閱讀 6765

著名的快速排序演算法裡有乙個經典的劃分過程:我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。 給定劃分後的n個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?

例如給定n = 5, 排列是1、3、2、4、5。則:

1的左邊沒有元素,右邊的元素都比它大,所以它可能是主元;

儘管3的左邊元素都比它小,但是它右邊的2它小,所以它不能是主元;

儘管2的右邊元素都比它大,但其左邊的3比它大,所以它不能是主元;

類似原因,4和5都可能是主元。

因此,有3個元素可能是主元。

輸入格式:

輸入在第1行中給出乙個正整數n(<= 105); 第2行是空格分隔的n個不同的正整數,每個數不超過109。

輸出格式:

在第1行中輸出有可能是主元的元素個數;在第2行中按遞增順序輸出這些元素,其間以1個空格分隔,行末不得有多餘空格。

輸入樣例:

5 1 3 2 4 5

輸出樣例:

3 1 4 5

#include

#include

#include

using

namespace

std;

int main()

sort(order.begin(), order.end());

int cnt = 0;

for (int i = 0; i < n; ++i)

}cout

<< cnt << endl;

for (int i = 0; i < prime.size(); ++i)

else

} system("pause");

return

0;}

#include

#include

#include

using

namespace

std;

int main()

sort(order.begin(), order.end());

int cnt = 0;

for (int i = 0,sum1=0,sum2=0; i < n; ++i)

}cout

<< cnt << endl;

for (int i = 0; i < prime.size(); ++i)

else

} system("pause");

return

0;}

#include

#include

#include

using

namespace

std;

int main()

sort(order.begin(), order.end());

int cnt = 0;

for (int i = 0,sum1=0,sum2=0; i < n; ++i)

}cout

<< cnt << endl;

if (cnt == 0)

for (int i = 0; i < cnt; ++i)

else

} system("pause");

return

0;}

PAT 乙級練習題 1005

當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每乙個數。例如對n 3進行驗證的時候,我們需要計算3 5 8 4 2 1,則當我們對n 5 8 4 2進行驗證的時候,就可以直接判定卡拉茲猜想的真偽,而不需要重複計算,因為這4個數已經在驗證3的時候遇到過了,我們稱5 8 4 2...

PAT 乙級練習題 1007

讓我們定義 dn 為 dn pn 1 pn,其中 pi 是第i個素數。顯然有 d1 1 且對於n 1有 dn 是偶數。素數對猜想 認為 存在無窮多對相鄰且差為2的素數 現給定任意正整數n 105 請計算不超過n的滿足猜想的素數對的個數。輸入格式 每個測試輸入包含1個測試用例,給出正整數n。輸出格式 ...

PAT乙級練習題 1010

設計函式求一元多項式的導數。注 x n n為整數 的一階導數為n x n 1 輸入格式 以指數遞降方式輸入多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出格式 以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。注意 零多項式 的...