博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断元素是否存在
阅读量:5115 次
发布时间:2019-06-13

本文共 1889 字,大约阅读时间需要 6 分钟。

题目链接:http://noi.openjudge.cn/ch0113/41/ 

总时间限制: 1000ms 内存限制: 65536kB
描述

有一个集合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
样例输入
0,22
样例输出
YES

代码一:深搜 

1 #include
2 int k,x; 3 int pd(int k,int x) 4 { 5 if(k>x) return 0; 6 else if(k==x) return 1; 7 return (pd(2*k+1,x)||pd(3*k+1,x)); 8 } 9 int main()10 {11 scanf("%d,%d",&k,&x);12 if(pd(k,x)==1) printf("YES");13 else if(pd(k,x)==0) printf("NO");14 return 0;15 }

 

 下面是广搜算法代码,是错的代码:

1 #include 
2 #include
3 #include
4 using namespace std; 5 int bfs(long long k,int x) 6 { 7 long long t1,t2,t3; 8 if(k==x) return 1; 9 else if(k>x) return -1;10 11 queue
q;12 q.push(k);13 14 while(!q.empty())15 {16 //printf("%lld\n",q.front());17 t1=q.front(); q.pop();18 t2=t1*2+1;19 t3=t1*3+1;20 if(t2==x||t3==x) return 1;21 else if(t2>x&&t3>x) return -1;22 else23 {24 if(t2
广搜,不能AC

错误原因:

有可能会发生这样一个情况:比较大的数据先入队,然后超x了结果返回-1。其实后面还有小数据没有被测到。 

 可以按如下方式修改:

1 #include 
2 #include
3 #include
4 using namespace std; 5 int bfs(long long k,int x) 6 { 7 long long t1,t2,t3; 8 if(k==x) return 1; 9 else if(k>x) return -1;10 11 queue
q;12 q.push(k);13 14 while(!q.empty())15 {16 //printf("%lld\n",q.front());17 t1=q.front(); q.pop();18 t2=t1*2+1;19 t3=t1*3+1;20 if(t2==x||t3==x) return 1;21 else22 {23 if(t2

 

转载于:https://www.cnblogs.com/huashanqingzhu/p/7745662.html

你可能感兴趣的文章
ionic2+ 基础
查看>>
Screening technology proved cost effective deal
查看>>
【2.2】创建博客文章模型
查看>>
Jsp抓取页面内容
查看>>
大三上学期软件工程作业之点餐系统(网页版)的一些心得
查看>>
Java语言概述
查看>>
关于BOM知识的整理
查看>>
使用word发布博客
查看>>
面向对象的小demo
查看>>
微服务之初了解(一)
查看>>
GDOI DAY1游记
查看>>
MyBaits动态sql语句
查看>>
HDU4405(期望DP)
查看>>
拉格朗日乘子法 那些年学过的高数
查看>>
vs code 的便捷使用
查看>>
Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JS 中的跨域请求
查看>>
JAVA开发环境搭建
查看>>
mysql基础语句
查看>>