當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每乙個數。例如對n=3進行驗證的時候,我們需要計算3、5、8、4、2、1,則當我們對n=5、8、4、2進行驗證的時候,就可以直接判定卡拉茲猜想的真偽,而不需要重複計算,因為這4個數已經在驗證3的時候遇到過了,我們稱5、8、4、2是被3「覆蓋」的數。如果n不能被數列中的其他數字所覆蓋,我們稱乙個數列中的某個數n為「關鍵數」
。
現在給定一系列待驗證的數字,我們只需要驗證其中的幾個關鍵數,就可以不必再重複驗證餘下的數字。你的任務就是找出這些關鍵數字,並按從大到小的順序輸出它們。
輸入格式:每個測試輸入包含1個測試用例,第1行給出乙個正整數k(<100),第2行給出k個互不相同的待驗證的正整數n(1 < n<=100)的值,數字間用空格隔開。
輸出格式:每個測試用例的輸出佔一行,按從大到小的順序輸出關鍵數字。數字間用1個空格隔開,但一行中最後乙個數字後沒有空格。
輸入樣例:
6輸出樣例:3 5 6 7 8 11
7 6思路:
首先,列出輸入所有數字在砍
的過程中出現的數字,將其儲存在陣列get_num中。
然後,依次迴圈比較給定輸入與每個數字的get_num中的數字,如果在乙個get_num陣列中出現了相同的值,則表示該數字可以被覆蓋,將其值改寫為0
。
最後,將比較過的初始陣列排序,除了關鍵字外,其餘非關鍵字的值已經改寫為0
,然後按照要求輸出。
示例**:
#include
#include
using
namespace
std;
int n;
int num[100],step[100],copynum[100];
int get_num[100][100];
int same[100];
int result[20];
void get_num(int a)
}//記錄「砍」地過程中出現地數
void compare(int a)
}}//比較輸入與第a個數字的驗證數
int main()
get_num(copynum);
for(int i=0;iint>());//降序排列
cout
<0];
for(int i=1;num[i]!=0;i++)
浙大PAT練習題1005
nowcoder號稱自己已經記住了1 100000之間所有的斐波那契數。為了考驗他,我們隨便出乙個數n,讓他說出第n個斐波那契數。當然,斐波那契數會很大。因此,如果第n個斐波那契數不到6位,則說出該數 否則只說出最後6位。對應每一組輸入,輸出第n個斐波那契數的最後6位。輸入例子 123 410000...
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的整數 數字間以空格分隔。輸出格式 以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。注意 零多項式 的...