題目
思路錄入資料
由於題目中限定數字最大為100,建立乙個容量為101的num陣列來儲存數字,初始值均為0,每錄入乙個數字i,將num[i]=1;
我們規定num[i]==0表示i未出現,num[i]==1表示i出現,num[i]==2表示i被覆蓋
判斷覆蓋數字
我們稱乙個數字i在遞推到1的過程**現的數字為i的路徑,如3的路徑為5、8、4、2、1;
依次檢測每個數字,若數字i出現且未被覆蓋,即num[i]==1,則將其路徑上所有小於等於100的數字都標記為覆蓋。這裡雖然輸入的數字小於等於100,但其路徑上的數字不一定如此,所以需要限定範圍,否則會出現段錯誤的情況;
對於所有沒有出現的數字和被覆蓋的數字(無論這個數字是否是出現過的),都不可能是關鍵數字,不考慮
列印資料
最後乙個資料不列印空格即可,列印語句printf("%d%c", i, --k ? 』 』 : 『\0』);學習於知乎,是一種很精練的方式
#include
#define size 101
intmain
(void);
scanf
("%d"
,&k)
;for
(i =
0; i < k; i++
)for
(i =
0; i < size; i++)if
(num[i]==1
)}for(i =
0, k =
0; i < size; i++)if
(num[i]==1
) k++
;for
(i = size -
1; i >=
0; i--)if
(num[i]==1
)printf
("%d%c"
, i,
--k ?
' ':
'\0');
return0;
}
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進行驗證的時候,就可以直接判定卡拉茲猜...