北京邮电大学_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
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>num[i];
		}
		
		for(i=0;i num[j+1]){
					swap = num[j];
					num[j] = num[j+1];
					num[j+1] = swap;
				}		
			}
		}
		
		cin>>m;
		for(i=0;i>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"<
#include
using namespace std;

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

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

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
总结:上面提到查找最好使用哈希。这里就用到了。非常easy。可是我还是想使用分冶法做一遍。

#include
using namespace std;

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

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

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
#include
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= 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"<

4,树查找

题目描写叙述:

有一棵树,输出某一深度的全部节点,有则输出这些节点,无则输出EMPTY。

该树是全然二叉树。

输入:

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

输出:

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

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

#include
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"<


转载于:https://www.cnblogs.com/lxjshuju/p/6885997.html

你可能感兴趣的:(数据结构与算法)