1. 程式人生 > >北郵機試真題2010

北郵機試真題2010

寫在前面:本人能力有限,以下程式碼完全為本人自己A出,如有不足之處還請廣大網友指點。

網研院

題目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。
示例1

輸入

5
1 5 2 4 3
3
2 5 6

輸出

YES
YES
NO

#include<stdio.h>

int main(){
    int n,m;
    while(scanf("%d",&n)!=EOF){
        
        int buf1[n];
        for(int i=0;i<n;i++){
            scanf("%d",&buf1[i]);
            
        }
        
        scanf("%d",&m);
        
        int buf2[m];
        
        for(int i=0;i<m ;i++){
            scanf("%d",&buf2[i]);
            
        }
        
        for(int i=0;i<m;i++){
            
            for(int j=0;j<n;j++){
                if(buf2[i]==buf1[j]){
                    printf("YES\n");
                    break;
                }
                if(j==n-1){
                    printf("NO\n");
                }
            }
        }        
        
        
    }
    
    return 0;
}

 

題目2描述

牛客網

查詢一個數組的第K小的數,注意同樣大小算一樣大。 如  2 1 3 4 5 2 第三小數為3。

輸入描述:

輸入有多組資料。
每組輸入n,然後輸入n個整數(1<=n<=1000),再輸入k。

輸出描述:

輸出第k小的整數。
示例1

輸入

6 2 1 3 5 2 2 3

輸出

3

 

#include<stdio.h>
#include<algorithm>
#include<cstring>

using namespace std;

bool mark[10001];

int num[10001];

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
    memset(mark,0,sizeof(mark));
    
    int size=0;
    for(int i=0;i<n;i++){
        int t;
        scanf("%d",&t);
        
        if(mark[t]==false){
            mark[t]=true;
            num[size++]=t;
        }
        
        
    }        
    
    sort(num,num+size);
    int m;
    scanf("%d",&m);
    
    printf("%d\n",num[m-1]);    
        
    }
    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。
示例1

輸入

12233445566677
33

輸出

YES
#include<stdio.h>
#include<iostream>
#include<string>

using namespace std;
int  buf[10];
int main(){
    string s1, cp;

    cin>>s1;    
    cin>>cp;
    for(int i=0;i<10;i++)
        buf[i]=0;
    
    for(int i=0;i<s1.size();i++){
        int t=s1[i]-'0';
        buf[t]++;
        
    }
    
    bool t=false;
    
    switch (cp.size()){
        case 1:{
            for(int i=0;i<s1.size();i++){
                if(s1[i]>cp[0]){
            
                    printf("YES\n");
                    t=true;
                    break;
                }    
            }
            break;
        }
        case 2:{
            for(int i=2;i<10;i++){
                if(cp[0]<i+'0'&&buf[i]>=2){
            
                    printf("YES\n");
                    t=true;
                    break;
                }
            }
            
            break;
        }
        case 3:{
            for(int i=2;i<10;i++){
                if(cp[0]<i+'0'&&buf[i]>=3){
            
                    printf("YES\n");
                    t=true;
                    break;
                }
            }
            
            break;
        }
        case 4:{
            for(int i=2;i<10;i++){
                if(cp[0]<i+'0'&&buf[i]>=4){
            
                    printf("YES\n");
                    t=true;
                    break;
                }
            }
            break;
        }
        case 5:{
            for(int i=2;i<6;i++){
                if(cp[0]<i+'0'&&buf[i]>=1&&buf[i+1]>=1&&buf[i+2]>=1&&buf[i+3]>=1&&buf[i+4]>=1){
            
                    printf("YES\n");
                    t=true;
                    break;
                }
            }
            
            break;
        }
        
    }
    if(t==false)
        printf("NO\n");
    
    return 0;
}

題目4描述

牛客網

有一棵樹,輸出某一深度的所有節點,有則輸出這些節點,無則輸出EMPTY。該樹是完全二叉樹。

輸入描述:

輸入有多組資料。
每組輸入一個n(1<=n<=1000),然後將樹中的這n個節點依次輸入,再輸入一個d代表深度。

輸出描述:

輸出該樹中第d層得所有節點,節點間用空格隔開,最後一個節點後沒有空格。
示例1

輸入

4
1 2 3 4
2

輸出

2 3
#include<stdio.h>
#include<cstring>

int buf1[1001];

int fun(int x,int q){
    if(q==0)return 1;
    int ans=1;
    for(int i=0;i<q;i++){
        ans*=x;
    }
    return ans;
}

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        
        memset(buf1,0,sizeof(buf1));
        
        for(int i=0;i<n;i++){
            scanf("%d",&buf1[i]);
            
        }
        
        int d,t;
        scanf("%d",&d);
        int i=fun(2,d-1)-1;
        t=fun(2,d)-1;
        for(;i<t&&buf1[i]!=0;i++){
            printf("%d",buf1[i]);
            if(i+1<=t&&buf1[i+1]!=0)
            printf(" ");
        }
        if(n<i)printf("EMPTY");
        
        printf("\n");
    }
    return 0;
}