您的位置:首页 > 其它

一道利用递归实现的集合枚举算法题

2018-02-11 18:14 127 查看
有一个集合M是这样生成的: (1) 已知 k 是集合 M 的元素; (2) 如果 y 是 M 的元素,那么, 2y+1 和 3y+1 都是 M 的元素; (3) 除了上述二种情况外,没有别的数能够成为 M 的一个元素。问题:任意给定 k 和 x,请判断 x 是否是 M 的元素。这里的 k是无符号整数,x 不大于 100000, 如果是,则输出YES,否则,输出 NO输入输入整数 k 和 x, 逗号间隔。输出如果是,则输出 YES,否则,输出NO样例输入

此题解法非常巧妙,运用了栈以及打表的技巧#include<iostream>
using namespace std;
int a[10000001];
void f(int n)
{
if(n<=1000000)
{
a
=1;
f(2*n+1);
f(3*n+1);
}
else return;

}
int main()
{
int k,x;
scanf("%d,%d",&k,&x);
f(k);
if(a[x]==1)
cout<<"YES";
else
{
cout<<"NO";
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: