著名的快速排序演算法裡有乙個經典的劃分過程:我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。 給定劃分後的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的整數 數字間以空格分隔。輸出格式 以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。注意 零多項式 的...