Loading

POJ 2247 Humble Numbers(搜索,生成子集)

Humble Numbers(搜索,生成子集)

题目:

​ 给出多次询问,问第k个丑数是多少(最多询问到k = 5842)。

​ 丑数:分解质因数后,质因子只包含2,3,5,7的数字。

思路:

​ 通过预处理得到,5842个丑数就行。这里可以使用dfs来进行预处理。

实现:

注意一下这个毒瘤的输出,对于11、12、13结尾是th。其他是根据末尾数字决定的。

map<int, int> vis;
int a[] = {2, 3, 5, 7};
int s[6005], idx = 0;

void dfs(int cur, int l)
{
    for(int i = l; i < 4; l ++)
    {
        if(cur * 1ll * a[i] > 2e9)	continue;
        if(vis.find(cur * a[i]) == vis.end())
        {
            vis[cur * a[i]] = 1;
            s[++ idx] = cur * a[i];
		dfs(cur * a[i], i);
        }
    }
}

int main()
{
    vis[1] = 1;
    s[++ idx] = 1;
    dfs(1, 0);
    sort(s + 1, s + idx + 1);
    
    int x;
	while(~scanf("%d", &x))
	{
		if(!x)	break;
		if(x % 10 == 1 && (x % 100) != 11)
			printf("The %dst humble number is %d.\n", x, s[x]);
		else if(x % 10 == 2 && (x % 100) != 12)
			printf("The %dnd humble number is %d.\n", x, s[x]);
		else if(x % 10 == 3 && (x % 100) != 13)
			printf("The %drd humble number is %d.\n", x, s[x]);
		else
			printf("The %dth humble number is %d.\n", x, s[x]);
	}
}
posted @ 2022-10-03 00:05  DM11  阅读(17)  评论(0编辑  收藏  举报