PAT乙級1005 繼續 3 1 猜想

2021-09-25 09:37:42 字數 1754 閱讀 4009

卡拉茲(callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。

當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每乙個數。例如對 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每個測試用例的輸出佔一行,按從大到小的順序輸出關鍵數字。數字間用 1 個空格隔開,但一行中最後乙個數字後沒有空格。

注意,關鍵數不是能覆蓋數列內所有數字的數字,而是不能被數列中的其他數字所覆蓋的數字。

我自己寫了一串**,大概有50行,開始時有兩個測試點一直過不了,也找不到原因。排查之後發現是氣泡排序法有問題,終於也算過了。我也看了大佬寫的**,讀起來神清氣爽,妙啊。也不知道我再練多少日子才能練出那樣的功力。

我的**

#include#includeint a[105],b[105],c[15];

using namespace std;

int main()

for(i=0;ic[j+1])

}//如果 key 值為 0,表明表中記錄排序完成

if (key==0)

}for(i=t-1;i>=0;i--)

qsort(num,100,sizeof(num[0]),cmp);

2、對char型別陣列排序(同int型別)

char strs[100];

int cmp( const void *a , const void *b )

qsort(strs,100,sizeof(strs[0]),cmp);

3、對double型別陣列排序(特別要注意)

double dbs[100];

int cmp( const void *a , const void *b )

qsort(dbs,100,sizeof(dbs[0]),cmp);

4、對結構體一級排序

struct d

arr[100]

int cmp( const void *a ,const void b)

qsort(arr,100,sizeof(arr[0]),cmp);

5、對結構體二級排序

struct d

arr[100];

//按照x從小到大排序,當x相等時按照y從大到小排序

int cmp( const void *a , const void *b )

qsort(d,100,sizeof(d[0]),cmp);

6、對字串進行排序

struct dictdicts[100]

int cmp ( const void *a , const void b )

qsort(dicts,100,sizeof(dicts[0]),cmp);

PAT(乙級)1005 繼續 3n 1 猜想

題目 卡拉茲 callatz 猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每乙個數。例如對n 3進行驗證的時候,我們需要計算3 5 8 4 2 1,則當我們對n 5 8 4 2進行驗證的時候,就可以直接判定卡...

PAT 乙級 1005 繼續 3n 1 猜想

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 卡拉茲 callatz 猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每乙個數。...

PAT乙級1005 繼續 3n 1 猜想

卡拉茲 callatz 猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每乙個數。例如對n 3進行驗證的時候,我們需要計算3 5 8 4 2 1,則當我們對n 5 8 4 2進行驗證的時候,就可以直接判定卡拉茲猜...