一道利用递归实现的集合枚举算法题
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;
}
此题解法非常巧妙,运用了栈以及打表的技巧#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;
}
相关文章推荐
- Vue利用递归实现简单的目录树结构
- 3.1题目: 利用递归方法实现一个函数,该函数能够实现n的阶乘,即 n! = n*(n-1)*…*3*2*1;
- python 利用递归实现全排列
- 利用函数递归实现无限分类
- Android利用递归实现上下分屏幕播放视频
- 利用Array Prototype的方法来实现对dom集合的筛选、indexOf、map等功能
- 第三周项目3-求集合并集(1)-利用算法库实现
- php下利用递归实现无限级分类
- 利用函数递归调用实现汉诺塔
- 利用递归实现1到100以内的求和
- 利用递归实现十进制转二进制
- 利用系统控件集合实现自定义view(自定义菜单)
- 利用递归实现不定重数多重循环(附源代码)
- c#利用链表模拟实现泛型集合List﹤T﹥
- 利用redis有序集合实现实时更新阅读排行榜
- 自己实现集合框架(五):利用单链表解决约瑟夫环问题
- 递归实现集合求解
- 利用递归实现n个数中的最大值 和最小值
- 利用 Map 集合的 containsKey 方法,实现对象数组的去重以及重复对象的字段值累加
- 递归和循环两种方式实现未知维度集合的笛卡尔积