`
xuerenlv
  • 浏览: 6129 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

北京邮电大学_2010网院___考研计算机_复试上机

 
阅读更多

1,查找

题目描述:

输入数组长度 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

总结:这个没技术含量,下面一个好些,简单多了,牵扯到查找,最好用哈希。
#include<iostream>
using namespace std;

int main(){
	int n,m;
	int i,j;
	int swap,find;
	
	while(cin>>n){
		int num[101] = {0};

		for(i=0;i<n;i++){
			cin>>num[i];
		}
		
		for(i=0;i<n;i++){
			for(j=0;j<n-1-i;j++){
				if(num[j] > num[j+1]){
					swap = num[j];
					num[j] = num[j+1];
					num[j+1] = swap;
				}		
			}
		}
		
		cin>>m;
		for(i=0;i<m;i++){
			cin>>find;

			int mid; 
			int low = 0;
			int head = n-1;
			while(low<=head){
				mid = (low+head)/2;
				if(num[mid] == find){
					break;
				}
				if(num[mid] > find){
					head = mid-1;
				}
				if(num[mid] < find){
					low = mid +1;
				}
			}
			
			if(num[mid] == find){
				cout<<"YES"<<endl;
			}else{
				cout<<"NO"<<endl;
			}
		
		}
	
	}


	return 0;
}
#include<iostream>
using namespace std;

int main(){
	int n,m;
	int i,a;
	int find;
	
	while(cin>>n){
		int num[101] = {0};

		for(i=0;i<n;i++){
			cin>>a;
			num[a] = 1;
		}
		
		cin>>m;
		for(i=0;i<m;i++){
			cin>>find;
			if(num[find] == 1){
				cout<<"YES"<<endl;
			}else{
				cout<<"NO"<<endl;
			}
		}
	}
}

2,查找第K小数

题目描述:

查找一个数组的第K小的数,注意同样大小算一样大。
如 2 1 3 4 5 2 第三小数为3。

输入:

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

输出:

输出第k小的整数。

样例输入:
6
2 1 3 5 2 2
3
样例输出:
3
总结:上面提到查找最好使用哈希,这里就用到了,很简单,但是我还是想使用分冶法做一遍。

#include<iostream>
using namespace std;

int main(){
	int n;
	int i,j,k,m;

	while(cin>>n){
		int arr[101000]={0};
		for(i=0;i<n;i++){
			cin>>m; 
			arr[m] = 1;
		}
		cin>>k;
		
		j=1;
		for(i=0;i<101000;i++){
			if(arr[i] == 1){
				if(j == k){
					cout<<i<<endl;
					break;
				}else{
					j++;
				}
			}
		}
		
	}


	return 0;
}

3,打牌

题目描述:

牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌。
规则:出牌牌型有5种
[1]一张 如4 则5...9可压过
[2]两张 如44 则55,66,77,...,99可压过
[3]三张 如444 规则如[2]
[4]四张 如4444 规则如[2]
[5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大。

输入:

输入有多组数据。
每组输入两个字符串(字符串大小不超过100)a,b。a字符串代表手中牌,b字符串代表处的牌。

输出:

压过输出YES 否则NO。

样例输入:
12233445566677
33
样例输出:
YES
总结:没有ac,不明白为什么,案例都可以通过啊

#include<iostream>
#include<string>
using namespace std;

int main(){
	string a,b;
	int i,j,h;

	while(cin>>a>>b){
		bool flag = false;
		int arr[10]={0};
		for(i=0;i<a.length();i++){
			h = a[i] - '0';
			arr[h]++;
		}

		if(b.length() >= 1 && b.length() <= 4){
			j = b.length();
			h = b[0] - '0';
			for(i=0;i<10;i++){
				if(i>h && arr[i] > j){
					flag = true;
					break;
				}
			}
		}

		if(b.length() == 5){
			int min = b[0] - '0';
			for(i=min+1;i<10;i++){
				for(j=0;j<5;j++){
					if(arr[i+j] == 0){
						break;
					}
					if(j == 4){
						flag = true;
						break;
					}
				}
			}
		}

		if(flag){
			cout<<"YES"<<endl;
		}else{
			cout<<"NO"<<endl;
		}
	}


	return 0;
}

4,树查找

题目描述:

有一棵树,输出某一深度的所有节点,有则输出这些节点,无则输出EMPTY。该树是完全二叉树。

输入:

输入有多组数据。
每组输入一个n(1<=n<=1000),然后将树中的这n个节点依次输入,再输入一个d代表深度。

输出:

输出该树中第d层得所有节点,节点间用空格隔开,最后一个节点后没有空格。

样例输入:
4
1 2 3 4
2
样例输出:
2 3
总结:感觉有些cheat,树查找没有用到树,只是树的一些性质。

#include<iostream>
using namespace std;
#define min_num -1000

int main(){
	int n,m;
	int i,j,k;

	while(cin>>n){
		int arr[1010];
		for(i=0;i<1010;i++){
			arr[i] = min_num;
		}
		for(i=1;i<=n;i++){
			cin>>arr[i];
		}

		cin>>m;
		k=1;
		for(i=1;i < m;i++){
			k*=2;
		}

		j=0;
		for(i=k;i <= k*2-1;i++){
			if(arr[i] != min_num){
				j++;
			}
		}

		if(j==0){
			cout<<"EMPTY"<<endl;
		}else{
			for(i=0;i<j-1;i++){
				cout<<arr[k+i]<<" ";
			}
			cout<<arr[k+j-1]<<endl;
		}
	
	}


	return 0;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics