卡拉茲(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進行驗證的時候,就可以直接判定卡拉茲猜...