zoukankan      html  css  js  c++  java
  • 北邮机试题----查找

    题目描述:

    输入数组长度 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())!='
    ')          
    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())!='
    ')
        {
            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())!='
    ')  
        {  
            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;
    }

    终于成了!



  • 相关阅读:
    HTML5+php图片自由裁剪上传功能
    一个日期时间显示框的美化风格示例
    PHP+jquery 瀑布流+LightBox图片盒子特效
    类型
    异常语句
    穷举
    练习
    累加求和
    猜拳游戏(三局两胜)
    正则表达式
  • 原文地址:https://www.cnblogs.com/six-moon/p/6365607.html
Copyright © 2011-2022 走看看