北邮机试真题2010
疯狂的葡萄 人气:0写在前面:本人能力有限,以下代码完全为本人自己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"); 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; }
加载全部内容