首页 > 其他 > 详细

北邮机试题----查找

时间:2017-02-04 16:32:54      阅读:347      评论:0      收藏:0      [点我收藏+]
题目描述:

输入数组长度 n 
输入数组      a[1...n] 
输入查找个数m 
输入查找数字b[1...m] 
 
输出 YES or NO  查找有则YES 否则NO 。

输入:

输入有多组数据。
每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100)。

输出:

如果在n个数组中输出YES否则输出NO。

样例输入:
5
1 5 2 4 3
3
2 5 6
样例输出:
YES
YES
NO

代码实现:
 1 #include <iostream>
 2 #include <stdio.h> 
 3 using namespace std;
 4 class Array{
 5 public:
 6     int m_length;
 7     int* m_numbers;
 8     void input()
 9     {    
10         if(m_length>0)
11         {    
12             char c;
13             m_numbers = new int[m_length];
14             int i=0;
15             while((c=getchar())!=\n)          
16             {
17                 if(c!= )
18                 {
19                     ungetc(c,stdin);
20                     cin>>m_numbers[i++];
21                 }
22             }
23         }
24     }
25     Array();
26 };
27 
28 Array::Array(){
29 
30 }
31 
32 bool reasearch(int a,Array* array)
33 {    
34     for(int i=0;i<array->m_length;i++)
35     {
36         if(a==array->m_numbers[i])
37             return true;
38     }
39     return false;
40 }
41 void output(Array* arrayA,Array* arrayB)
42 {
43     for(int i =0 ; i< arrayB->m_length;i++)
44     {
45         if(reasearch(arrayB->m_numbers[i],arrayA))
46             cout<<"YES"<<endl;
47         else
48             cout<<"NO"<<endl;
49     }
50 }
51 
52 int main()
53 {    
54     int number;
55 
56     while(scanf("%d",&number)!=EOF)
57     {
58         fflush(stdin);
59         Array* arrayA = new Array();
60         arrayA->m_length=number;
61         arrayA->input();
62         int numberB;
63         cin>>numberB;
64         fflush(stdin);
65         Array* arrayB = new Array();
66         arrayB->m_length=numberB;
67         arrayB->input();
68         output(arrayA,arrayB);
69     }
70     return 0;
71 }

 

VC++运行成功

技术分享

问题1:

如何一行输入数组

方法一:

#include<iostream>
using namespace std;
int main()
{
    int a[50];
    int i = 0;
    char c;
    while((c=getchar())!=\n)
    {
        if(c!= )//把这句判断条件改动
        {
            ungetc(c,stdin);
            cin>>a[i++];
        }
    }
    for(int j=0;j<i;j++)
    {
        cout<<"a["<<j<<"]:"<<a[j]<<endl;
    }
}

方法二:

#include<iostream>  
using namespace std;  
  
int main()  
{  
    int a[20];  
    int i = 0;  
    char c;  
    cin>>a[i++];  
    while((c=getchar())!=\n)  
    {  
        cin>>a[i++];  
    }  
    for(int j=0;j<i;j++)  
    {  
        cout<<"a["<<j<<"]:"<<a[j]<<endl;  
    }  
}  

问题2:

在输入了第一个数字之后。cin中存在一个流,无法正确输入数组

可以使用 fflush(stdin);清除缓存流

问题3:如何实现多组数据输入

参见:http://blog.csdn.net/sxhelijian/article/details/8978850

 

虽然说在VC++上跑起来没错,但是在OJ平台上始终是Runtime Error,实在是不知道怎么办。

 



北邮机试题----查找

原文:http://www.cnblogs.com/six-moon/p/6365607.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!