zoukankan      html  css  js  c++  java
  • 北京邮电大学_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
    总结:上面提到查找最好使用哈希。这里就用到了。非常easy。可是我还是想使用分冶法做一遍。

    #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;
    }


  • 相关阅读:
    咏南微服务架构中间件
    几个开源的clickstream 分析工具
    partiql 学习一 试用
    partiql 亚马逊开源的基于sql 的查询语言
    cube.js 最新版本的一些特性
    astronomer 企业级的airflow 框架
    neodash 构建neo4j dashboard 的工具
    开发自定义的dremio 函数
    dremio sql 操作
    dremio 生产部署推荐硬件配置
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6885997.html
Copyright © 2011-2022 走看看