| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1210 人关注过本帖
标题:很白痴的一个问题!!!囧。。。
只看楼主 加入收藏
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
结帖率:66.67%
收藏
已结贴  问题点数:80 回复次数:31 
很白痴的一个问题!!!囧。。。
描述
给定N个整数,M个问题
对于每个问题,你需要回答数字A是否在N个数字里出现过
输入
第一行是两个整数N和M    ( 0 < N , M < 100000)
接下来的一行,共有N个整数
接下来的M行,每行有1个整数A
输出
共M行,
对于每个询问,若A出现过,则输出YES
否则 输出NO
样例输入
5 2
1 2 3 4 5
5
0
样例输出
YES
NO




问题我知道了,第二行输入中包含-1时WA了。。。
eg:
5 2 
1 -1 2 3 4
-1
NO

YES

既然不能返回一个数值,那么怎么办呢?把函数定义为bool型能行吗?那该怎么弄?

#include<iostream>
using namespace std;

int search(int key,int min,int max,int a[])
{
    int mid;
    while(min<=max)
    {
        mid = (min + max)/2;
        if(key == a[mid]) return mid;
        else if(key < a[mid]) return search(key,min,mid-1,a);
        else if(key > a[mid]) return search(key,mid+1,max,a);
    }
    return -1;   //查找失败返回-1
}

int main()
{
    int i,n,m,key;
    int a[100000];
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    while(m--)
    {
        scanf("%d",&key);
        if(search(key,0,n-1,a) == -1)
            printf("NO\n");
        else printf("YES\n");
    }
    return 0;
}
搜索更多相关主题的帖子: 怎么办 
2011-11-19 13:24
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
各位大侠来看看啊,急啊!!
2011-11-19 13:38
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
我就是想问在C++中怎么定义一个bool型的函数,返回值是TRUE或FALSE,头文件是什么?
另外,C中怎么定义?
2011-11-19 14:07
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:20 
程序代码:
#include<iostream>
using namespace std;

bool search(int key,int min,int max,int a[])
{
    while(min<=max)
    {
        if(key == a[min++]) return 0;
    }
    return 1;   //查找失败返回-1
}

int main()
{
    int i,n,m,key;
    int a[100000];
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    while(m--)
    {
        scanf("%d",&key);
        if(search(key,0,n-1,a))
            printf("NO\n");
        else printf("YES\n");
    }
    return 0;
} 


[ 本帖最后由 jcw08120110 于 2011-11-19 14:28 编辑 ]

君生我未生 我生君以老
2011-11-19 14:17
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 4楼 jcw08120110
不对啊,你用数据试试。
3 1
1 0 2
2011-11-19 14:24
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
回复 5楼 cb_1212
不好意思没细看 ~ 我就大意了下 好了现在改好了 可以用了!~~~ 骚蕊~

君生我未生 我生君以老
2011-11-19 14:29
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
程序代码:
#include<iostream>
using namespace std;

bool search(int key,int min,int max,int a[])
{
    int mid;
    while(min<=max)
    {
        mid = (min + max)/2;
        if(key == a[mid]) return true;
        else if(key < a[mid]) return search(key,min,mid-1,a);
        else if(key > a[mid]) return search(key,mid+1,max,a);
    }
    return false;   //查找失败返回假
}

int main()
{
    int i,n,m,key;
    int a[100000];
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    while(m--)
    {
        scanf("%d",&key);
        if(search(key,0,n-1,a))
            printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}



测试数据:
5 2
1 0 -1 2 3
0
NO
-1
YES
请按任意键继续. . .
这是为何???求高手!!!
2011-11-19 14:36
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
收藏
得分:0 
      if(key == a[mid]) return true;
        else if(key < a[mid]) return search(key,min,mid-1,a);
        else if(key > a[mid]) return search(key,mid+1,max,a);
你是1 0 -1 2 3 那么第一句 循环时  就是 0>-1  那么就是递归调用 search(0,3,4,a); 你说在a[3]~a[4]能有0吗?
你这个程序的前提就是 数组是按顺序排序的! 这个属于逻辑错误 你得程序本身就写错了!

君生我未生 我生君以老
2011-11-19 14:41
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 8楼 jcw08120110
不懂。。。我写的为什么前提是按顺序排列的呢?这是折半查找啊。。。。。。。
2011-11-19 14:51
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 8楼 jcw08120110
你的程序貌似就是那个查找函数和我不同啊。那个a[3]与a[4]之间没有0是什么意思啊
还有,数组长度很大啊,按你的顺序查找,提交时不知道会不会超时。。。。
2011-11-19 14:55
快速回复:很白痴的一个问题!!!囧。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014122 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved