问题 C: 完美的数(思维)
生活随笔
收集整理的這篇文章主要介紹了
问题 C: 完美的数(思维)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題 C: 完美的數
時間限制: 1 Sec 內存限制: 128 MB
[提交][狀態][討論版]
題目描述
一個數是否完美是這樣定義的,如果這個數的素數因子只有2,3,5,7,那么這個數就是完美的.
顯而易見前面幾個完美的數為1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, …
你能告訴我第n個完美的數是多少嘛?
輸入
多組測試數據.每組數據的第一行包含一個正整數n(1<= n<=5842).
輸出
對于每組測試數據輸出第n個完美的數
樣例輸入
1 11 5842樣例輸出
1 12 2000000000提示
/*
打表。
用優先隊列。
首先1入隊,
然后1出隊,出隊的同時記錄結果,分別乘2,3,5,7,得到的結果入隊列
然后再讓隊列中一個元素出隊(最大的最小的都可以,我是讓最小的出隊),出隊的同時記錄結果,分別乘2,3,5,7,得到的<=2e9的結果入隊列
直到隊列為空。
*/
ac_code:
一個學長的巧妙的解法:
#include <bits/stdc++.h> using namespace std; const int maxn = 6e3; int mp[maxn]; int main() {int i = 0;int x,y,l,r;mp[++i] = 1;x = y = l = r = 1;while(i <= 5842){int t = min(mp[x]*2,min(mp[y]*3,min(mp[l]*5,mp[r]*7)));if(t == mp[x]*2) x++;if(t == mp[y]*3) y++;if(t == mp[l]*5) l++;if(t == mp[r]*7) r++;mp[++i] = t;}int n;while(~scanf("%d",&n)){printf("%d\n",mp[n]);}return 0; }總結
以上是生活随笔為你收集整理的问题 C: 完美的数(思维)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 问题 D: 巧求和(思维)
- 下一篇: 问题 E: 括号规则