題目鏈結
通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。
通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。
通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。
鴿子數字由以下過程定義:從任何正整數開始,將數字替換為其各個數字的平方和,
並重複該過程,直到該數字等於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 通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。通常來說,題面短的題目一般都比較難,所以我要把題面寫得很長很長。鴿子數字由以下過程定義 從任何正整數開始,將數字替換為其各個數字的平...