求丑数

来源:互联网 发布:wind数据终端 编辑:程序博客网 时间:2024/04/28 05:23

大致描述:

Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ... 
shows the first 10 ugly numbers.

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

用指针实现:

大致思想:设定三个指针i3,i5,i7.

依次按照每个数字都要乘3,5,7给出下面代码:
#include <stdio.h>
#include <string.h>
#define MIN(x,y) ((x)<(y)?(x):(y))
int ug[1501];

void init()
{
    int i;
    int i2, i3, i5;
    i2 = i3 = i5 = 1;
    ug[1] = 1;
    for (i=2; i<=1500; i++) {
        int t = MIN(ug[i2]*2, MIN(ug[i3]*3, ug[i5]*5));
        ug[i] = t;
        if (t == ug[i2]*2) i2++;
        if (t == ug[i3]*3) i3++;
        if (t == ug[i5]*5) i5++;
       
    }
}

int main()
{
    init();
    int n;
    while (scanf("%d", &n) != EOF) {
        if (!n) break;
        printf("%d\n", ug[n]);
    }
    return 0;
}

 

另外http://hawstein.com/posts/ctci-ch10-math.html 给出了另一种解法,但是该方法不好理解,上述方法更好理解

PS一个笔记:

N个苹果放到M个盘子中,盘子可以为空是个整数划分问题

如果盘子不为空可以转化为盘子为空的问题见链接:

http://blog.csdn.net/qq675927952/article/details/6312255

0 0
原创粉丝点击