超級無敵簡單題

2021-09-12 19:43:28 字數 1303 閱讀 6994

題目鏈結

通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。

通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。

通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。

鴿子數字由以下過程定義:從任何正整數開始,將數字替換為其各個數字的平方和,

並重複該過程,直到該數字等於1。如果不能,則這個數字不是

鴿子數。

例如7是鴿子數,因為7->49->97->130->10->1。(7*7=49,4*4+9*9=97,9*9+7*7=130....如此類推)

顯然1是第乙個鴿子數。

有q個詢問,每個詢問給出乙個數k,你需要輸出第k個鴿子數。

第一行乙個q,代表詢問的個數(q<=100000)

接下來q行,每行乙個數字k(k<150000)

每行輸出乙個數,代表第k個鴿子數
2

12

1

7

思路:

直接暴力,預處理。第150000個鴿子數大約就是1050000左右,用乙個陣列sign標記這個數是不是鴿子數。

sign[i]==1//不是鴿子數

sign[i]==2//是鴿子數

首先初始化為0,sign[1]=2; 然後從2開始,找到乙個標記為0的數(沒處理過),對它進行變換,並且進行標記(先標記為1),同時存到乙個陣列temp中,直到出現標記不為0的(即處理過的)。

然後直接把陣列temp中的數全部標記為與最後出現的數標記相同。

因為如果最後出現的數sign[i]==2,那麼這個過程**現的數都可以變換為鴿子數。

同樣如果sign[i]==1,即出現了處理過的數,那麼這個過程中所有的數都不能處理為鴿子數。

#include#include#include#includeusing namespace std;

int sign[1100000];

int ans[1100000];

int change(int x)

return sum;

}int main()

if(sign[b])

}int cnt=1;

for(int i=1; i<1100000; i++)

int t;

scanf("%d",&t);

while(t--)

return 0;

}

超級無敵簡單題

problem description 通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。鴿子數字由以下過程定義 從任何正整數開始,將數字替換為其各個數字的平...

hdu超級無敵簡單題(打表)

problem description 通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。鴿子數字由以下過程定義 從任何正整數開始,將數字替換為其各個數字的平...

1003 超級無敵簡單題 暴力打表

problem description 通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。鴿子數字由以下過程定義 從任何正整數開始,將數字替換為其各個數字的平...