标签:
d第一个丑数是1,1*2,1*3,1*5最小的数字是2,则第二个丑数是2,然后1*3,2*2,1*5最小的是3,第三个丑数就是3,然后2*3,2*2,1*5最小的数字是4,所以第四个丑数就是4,当每次找到一个丑数后,就记录当前丑数的下标和之前那两个没选中的数字的下标,根据这三个数字来依次往后更新丑数
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 int result[1501]; 5 6 void init() 7 { 8 int p1 = 1, p2 = 1, p3 = 1; 9 result[1] = 1; 10 for(int i = 2; i <= 1500; ++i) 11 { 12 result[i] = min(result[p1]*2,min(result[p2]*3,result[p3]*5)); 13 14 if(result[i] == result[p1]*2) ++p1; 15 if(result[i] == result[p2]*3) ++p2; 16 if(result[i] == result[p3]*5) ++p3; 17 } 18 } 19 20 int main() 21 { 22 int n; 23 init(); 24 while(cin >> n && n) 25 cout << result[n] << endl; 26 return 0; 27 }
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 int result[1501]; 5 6 void init() 7 { 8 int p1 = 1, p2 = 1, p3 = 1; 9 result[1] = 1; 10 for(int i = 2; i <= 1500; ++i) 11 { 12 result[i] = min(result[p1]*2,min(result[p2]*3,result[p3]*5)); 13 14 if(result[i] == result[p1]*2) ++p1; 15 if(result[i] == result[p2]*3) ++p2; 16 if(result[i] == result[p3]*5) ++p3; 17 } 18 } 19 20 int main() 21 { 22 int n; 23 init(); 24 while(cin >> n && n) 25 cout << result[n] << endl; 26 return 0; 27 }
标签:
原文地址:http://www.cnblogs.com/guoyongheng/p/5723299.html