北郵機試真題2010
阿新 • • 發佈:2020-03-01
寫在前面:本人能力有限,以下程式碼完全為本人自己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; }