题目

源地址:

http://poj.org/problem?id=1338

理解

本来貌似是一道很难的题目,不过因为数据比较弱,打表水过。

代码

#include <iostream>
using namespace std;

const int MAX_POS = 1500;

int myMin(int a, int b, int c)
{
    int min;
    min = a < b ? a : b;
    min = min < c ? min : c;
    return min;
}

int main(int argc, char const *argv[])
{
    int ugly[MAX_POS + 1];
    ugly[1] = 1;
    int p2, p3, p5;
    p2 = p3 = p5 = 1;

    for (int i = 2; i <= MAX_POS; i++)
    {
        int value2 = ugly[p2] * 2;
        int value3 = ugly[p3] * 3;
        int value5 = ugly[p5] * 5;
        ugly[i] = myMin(value2, value3, value5);
        if (ugly[i] == value2) p2++;
        if (ugly[i] == value3) p3++;
        if (ugly[i] == value5) p5++;
    }

    int n;
    while (cin >> n, n != 0)
    {
        cout << ugly[n] << endl;
    }

    return 0;
}

更新日志

  • 2014年08月12日 已AC。