判断元素是否存在

Posted 寄蜉蝣于天地,渺沧海之一粟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断元素是否存在相关的知识,希望对你有一定的参考价值。

题目链接: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<cstdio>
 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 <iostream>
 2 #include<stdio.h>
 3 #include<queue>
 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<long long> 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         else
23         {
24             if(t2<x) q.push(t2);
25             if(t3<x) q.push(t3);
26         }
27     }
28 }
29 int main()
30 {
31     long long k;
32     int x;
33     freopen("r.txt","w",stdout);
34     scanf("%lld,%d",&k,&x);
35     printf("%lld %d\n",k,x);
36     int res=bfs(k,x);
37     if(res==1)printf("YES\n");
38     else printf("NO\n");
39     return 0;
40 }
广搜,不能AC

错误原因:

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

 

以上是关于判断元素是否存在的主要内容,如果未能解决你的问题,请参考以下文章

jquery怎么判断是不是有某个元素

JavaScript笔试题(js高级代码片段)

WebDriver(Selenium2)判断元素是不是存在。

jquery判断选择元素是否存在

jquery判断一个元素是不是存在

在jquery中怎么判断是不是存在