- 题目描述:
-
输入数组长度 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; }
终于成了!