PAT Basic 1005. 繼續(3n+1)猜想(C語言實現)
題目
卡拉茲(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<n<=100)的值,數字間用空格隔開。
輸出格式:每個測試用例的輸出佔一行,按從大到小的順序輸出關鍵數字。數字間用1個空格隔開,但一行中最後一個數字後沒有空格。
輸入樣例:
6
3 5 6 7 8 11
輸出樣例:
7 6
思路
初步思路:
1.按個數讀入陣列。
2.從第一個元素開始,逐步計算猜想數,對每一個猜想數遍歷陣列,將相等的元素置為0並計數。
3.氣泡排序。
4.順序輸出並新增空格。
改進思路:
考慮到輸入資料範圍有限,可以通過設定足夠範圍的陣列來省去排序的步驟。即設定0~100陣列,將元素放入對應位置。
(注意猜想數有可能超出100範圍,防止陣列下標越界)
程式碼如下:
#include <stdio.h> int main() { int K=0, n=0; int tabel[101] = {0}; scanf("%d", &K); //將元素對應位置標記為1 for(int i = 0; i < K; i++) { scanf("%d", &n); tabel[n] = 1; } //遍歷陣列,求還存在數的猜想數 for(int i = 1; i <= 100; i++) { if(tabel[i]) { for(n = i; n > 1; ) { if(n % 2) { n = (3 * n + 1) / 2; } else { n /= 2; } //檢驗猜想數是否存在,需考慮猜想數超出100,陣列越界的問題 if(n <= 100 && tabel[n]) { tabel[n] = 0; K--; } } } } for(int i = 100; i >= 1; i--) { if(tabel[i] == 1) { printf("%d%c", i, --K ? ' ' : '\0'); } } return 0; }
相關推薦
PAT Basic 1005. 繼續(3n+1)猜想(C語言實現)
題目 卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。 當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每一個數。例如對n=3進行驗證的時候,我們需要計算3、5、8、4、2、1,則當我們對n=5、8、4、2進
PAT乙級1005. 繼續(3n+1)猜想(C語言)
/* * (3n+1)猜想 的迴圈計算條件是 數字 != 1 * 不能被數列中的其他數字所覆蓋為“關鍵數” ----> 能被覆蓋的數最終也會變成1; * 即 遍歷數列,將非關鍵數改為1後,剩下的就是關鍵數。 */ #inclu
1005 繼續(3n+1)猜想(C語言版 + 註釋 + 複雜對映)
卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。 當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每一個數。例如對 n=3 進行驗證的時候,我們需要計算 3、5、8、4、2、1,則當我們對 n=5、8、4、2
PAT:1005 繼續(3n+1)猜想(25 分)C語言
PAT 1005 繼續(3n+1)猜想(25 分) C語言 #include<stdio.h> int main() { int n; scanf("%d", &n); //輸入n個整數 int zs[n]; for(in
PAT 乙級 1005 繼續(3n+1)猜想(散列表)
1005 繼續(3n+1)猜想 (25)(25 分) 卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。 當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每一個數。例如對n=3進行驗證的時候,我們需要計算3、5
PAT Basic 1025. 反轉連結串列 (25)(C語言實現)
, CSDN內容暫時不更新(將來有計劃更新), 請前往連結檢視最新內容. 歡迎star 我的repo題目給定一個常數K以及一個單鏈表L,請編寫程式將L中每K個結點反轉。例如:給定L為
PAT Basic 1052. 賣個萌 (20)(C語言實現)
, CSDN內容暫時不更新(將來有計劃更新), 請前往連結檢視最新內容. 歡迎star 我的repo題目萌萌噠表情符號通常由“手”、“眼”、“口”三個主要部分組成。簡單起見,我們假設
PAT Basic 1033. 舊鍵盤打字(20)(C語言實現)
, CSDN內容暫時不更新(將來有計劃更新), 請前往連結檢視最新內容. 歡迎star 我的repo題目舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該
PAT Basic 1017. A除以B (20)(C語言實現)
, CSDN內容暫時不更新(將來有計劃更新), 請前往連結檢視最新內容. 歡迎star 我的repo題目本題要求計算A/B,其中A是不超過1000位的正整數,B是1位正整數。你需要輸
PAT Basic 1053. 住房空置率 (20)(C語言實現)
, CSDN內容暫時不更新(將來有計劃更新), 請前往連結檢視最新內容. 歡迎star 我的repo題目在不打擾居民的前提下,統計住房空置率的一種方法是根據每戶用電量的連續變化規律進
PAT (Basic Level) Practice (中文)1005 繼續(3n+1)猜想 (25 分)_C語言實現
題目地址 題目解析:這裡我的處理方式有一定簡潔性,可供參考。 我的程式碼: #include<stdio.h> int main() { int n,aa[101]={0};//構建包含下標2-100的陣列(輸入的數字的範圍)記錄每次運算的情況 scanf
PAT-1005 繼續(3n+1)猜想 (25 分)
1005 繼續(3n+1)猜想 (25 分) 卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。 當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程
PAT 乙級 1005 繼續(3n+1)猜想 (25)(25 分)
1005 繼續(3n+1)猜想 (25)(25 分) 卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。 當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每一個數。例如對n=3進行驗證的時候,我們需要計算3、5
【PAT】B1005 繼續(3n+1)猜想(25 分)
tdi can scanf code ret return amp emp ++ #include<stdio.h> #include<algorithm> using namespace std; int Table[1000]={0}; bool
PAT-乙級-1005 繼續(3n+1)猜想
避免 names iostream base clu 測試 順序輸出 math problem 卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裏,情況稍微有些復雜。 當我們驗證卡拉茲猜想的時候,為了避免重復計算,可以記錄下遞推過程中遇到的每一個數。
1005 繼續(3n+1)猜想 (25 分)
卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。 當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每一個數。例如對 n=3 進行驗證的時候,我們需要計算 3、5、8、4、2、1,則當我們對 n=5、8、4、2 進行驗證的
1005 繼續(3n+1)猜想 (25 分)java 實現
1005 繼續(3n+1)猜想 (25 分) 卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。 當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每一個數。例如對 n=3 進行驗證的時候,我
(PAT乙級)1005 繼續(3n+1)猜想
卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。 當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每一個數。例如對n=3進行驗證的時候,我們需要計算3、5、8、4、2、1,則當我們對n=5、8、4
PAT乙級1005 繼續(3n+1)猜想
卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。 當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每一個數。例如對n=3進行驗證的時候,我們需要計算3、5、8、4、2、1,則當我們對n=5、8、4、2進行驗證的時候,就可以直接判定卡拉茲猜想
PAT 乙級 1005 繼續(3n+1)猜想
1005 繼續(3n+1)猜想 (25 point(s)) 卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目裡,情況稍微有些複雜。 當我們驗證卡拉茲猜想的時候,為了避免重複計算,可以記錄下遞推過程中遇到的每一個數。例如對 n=3