PAT-B 1005 繼續(3n+1)猜想【陣列】
PAT-B 1005 繼續(3n+1)猜想
https://pintia.cn/problem-sets/994805260223102976/problems/994805320306507776
題目
卡拉茲(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
分析
使用一個陣列記錄每個數覆蓋的數,num[i]儲存的是n個數所覆蓋的數中i出現的次數,具體看程式。
C++程式
#include<iostream>
#include<algorithm>
using namespace std;
const int N=105;
int a[N],num[100*N];//num[i]儲存的是n個數所覆蓋的數中i出現的次數
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
int temp=a[i];
while(temp!=1)
{
if(temp&1) temp=temp*3+1;//如果temp是奇數
temp/=2;
num[temp]++;
}
}
sort(a,a+n);//排序,這樣保證結果從大到小
bool flag=false;
for(int i=n-1;i>=0;i--)
{
if(!num[a[i]])
{
if(flag) printf(" ");
printf("%d",a[i]);
flag=true;
}
}
printf("\n");
return 0;
}
相關文章
- 1005 繼續(3n+1)猜想 (25分)
- PAT 1005 繼續(3n+1)猜想 python程式碼滿分Python
- [PAT B] 1005 繼續 (3n+1) 猜想 (沒做出來幫我看看咋整)
- PAT-B 1001 害死人不償命的(3n+1)猜想【模擬】
- 1001 callatz猜想 害死人不償命的(3n+1)猜想
- PAT-B 1066 影象過濾【陣列】陣列
- PAT-B 1007 素數對猜想【素數】
- PAT-B 1019 數字黑洞【陣列+模擬】陣列
- PAT-B 1092 最好吃的月餅【陣列】陣列
- PAT-B 1083 是否存在相等的差【陣列】陣列
- 1001 害死人不償命的(3n+1)猜想
- 1001 害死人不償命的(3n+1)猜想
- LeetCode1005. K 次取反後最大化的陣列和LeetCode陣列
- 1001 害死人不償命的(3n+1)猜想 PTA
- 字尾陣列(後續)陣列
- [PAT B] 1001 害死人不償命的 (3n+1) 猜想
- HDU 1005 Number Sequence(矩陣快速冪)矩陣
- 陣列總結,持續更新~陣列
- C++陣列的連續性C++陣列
- 最短無序連續子陣列陣列
- 連續子陣列的最大和陣列
- PAT-B 1068 萬綠叢中一點紅【對映+陣列】陣列
- PAT (Basic Level) Practice 1001 害死人不償命的(3n+1)猜想
- 【陣列】1550. 存在連續三個奇數的陣列(簡單)陣列
- PAT-B 1008 陣列元素迴圈右移問題【簡單模擬】陣列
- leetcode最短無序連續子陣列LeetCode陣列
- 雙指標查詢陣列的連續規律子陣列問題指標陣列
- PAT乙級1001 || 害死人不償命的(3n+1)猜想(C語言)C語言
- 最大連續子陣列和的實現陣列
- lc3041 修改陣列後最大化陣列中的連續元素數目陣列
- PAT B1001 害死人不償命的(3n+1)猜想(簡單模擬)
- 連結串列-3n+1數列問題
- 最大連續子陣列和(最大子段和)陣列
- JZ-030-連續子陣列的最大和陣列
- 陣列[簡單]1550. 存在連續三個奇數的陣列2020/11/14(6)陣列
- 給出一個由[-100,100]之間整陣列成的陣列,求其相加和最大的連續子陣列 輸入 一個連續整陣列成的陣列 輸出 子陣列相加的最大值 樣例輸入 -......陣列
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- 每日一練(22):連續子陣列的最大和陣列