| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1210 人关注过本帖
标题:很白痴的一个问题!!!囧。。。
取消只看楼主 加入收藏
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
结帖率:66.67%
收藏
已结贴  问题点数:80 回复次数:16 
很白痴的一个问题!!!囧。。。
描述
给定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
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 4楼 jcw08120110
不对啊,你用数据试试。
3 1
1 0 2
2011-11-19 14:24
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
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
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 7楼 cb_1212
呃呃 我明白你的意思了。但是可以用折半查找的办法写么?我写的那个怎么改才对呢?
用顺序查找很费时。
2011-11-19 15:06
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 12楼 jcw08120110
呃呃 我懂了。。。
好吧。。但是用折半查找一定要先排序的是吧。。。我有点不明白了,既然这样直接用顺序查找就好了,折半查找还有什么意义啊。。。
2011-11-19 15:11
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 12楼 jcw08120110
Time Limit Exceed at Test 2

这是你的提交上去了。。。
其实你可以想想,数组长度是100000  那不是一般的大啊。。不超时才怪。。。。。。
还是要用二分的,而且要用到排序。。。。。
2011-11-19 15:19
快速回复:很白痴的一个问题!!!囧。。。
数据加载中...
 
   



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

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