北邮机试题----查找

题目描述:

输入数组长度 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,实在是不知道怎么办。

通过将数据存在txt文件中

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void input_array(int* arrays,string buffer,int number)
{
   // const char* c = new char[number];
    //c = buffer.c_str();
    int j = 0;
    for(int i=0;i<buffer.size();i++)
    {
        if(buffer[i]!=' ')
        {
            arrays[j]=buffer[i]-'0';
            j++;
        }
    }
}

bool reasearch(int x,int* arrays,int j)
{
    for(int i =0;i<j;i++)
    {
        if(x==arrays[i])
            return true;
    }
    return false;
}

void output(int* array_1,int number_1,int* array_2,int number_2)
{
    for(int i = 0;i<number_2;i++)
    {
        if(reasearch(array_2[i],array_1,number_1))
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
}

int main()
{
    ifstream cin("ex.txt");
    int number_1,number_2;
    int* array_1;
    int* array_2;
    string buffer;
    int i = 1;
    while(getline(cin,buffer))
    {
        if(i%2==1)
        {
            number_1=buffer[0]-'0';
            array_1 = new int[number_1];
            getline(cin,buffer);
            input_array(array_1,buffer,number_1);
            i++;
        }
        else
        {
            number_2=buffer[0]-'0';
            array_2 = new int[number_2];
            getline(cin,buffer);
            input_array(array_2,buffer,number_2);
            i++;
            output(array_1,number_1,array_2,number_2);
        }
    }
    return 0;
}

终于成了!

 

 



posted @ 2017-02-04 15:54  包子糖Sakura  阅读(440)  评论(0编辑  收藏  举报