2010北邮复试网研上机题
前言:
转眼间,研究生已经过去半年了,从当初的电脑小白到如今也能熟练的操作linux系统,心里感慨也是很多的。当初耿耿于怀的是北邮复试的时候C基础太差,导致上机题一道也没做出来,虽然这半年我主要学习的是运维,但是也对php和C有了一定的了解,今天下午把北邮2010的上机题又做了一下,贴出代码和大家共享,其实态度和认真真的会决定一个人的一生,当初我也是dota爱好者,电脑小白,现在我也能负责服务器端的开发了,大家加油。
当下:
已经过了一年,最近也一直再联系ACM,哈哈,再看当时写的代码和格式规范,好烂啊,忍不住重构一下!
查找
-
输入数组长度 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
样例输出:
AC代码:
这道题没任何难度,就是两个for循环实现即可
#include <stdio.h> #include <stdlib.h> int main() { int a[101], b[101]; int n, m, i, j, flag; while(scanf("%d",&n) != EOF) { //接收输入数组 for(i = 0; i < n; i ++) { scanf("%d",a + i); } //接收查找数组 scanf("%d",&m); for(j = 0; j < m; j ++) { scanf("%d",b + j); } //判断查找存在 for(j = 0; j < m; j ++) { flag = 0; for(i = 0; i < n; i ++) { if(b[j] == a[i]) { flag = 1; break; } } if(flag) { printf("YES\n"); }else { printf("NO\n"); } } } return 0; }
查找第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
样例输出:
AC代码:
考察的就是简单的快速排序,上我的AC代码
#include <stdio.h> #include <stdlib.h> int partition(int *A, int left, int right); void quicksort(int *A, int begin, int end); int main() { int i, j, n, k; int a[1001]; while(scanf("%d",&n) != EOF) { //接受stdin输入数据 for(i = 0; i < n; i ++) { scanf("%d",a + i); } scanf("%d",&k); //快速排序 quicksort(a, 0, n - 1); //输出第k小的数 for(i = 0, j = 0; i < n && j < k; i ++) { if(a[i] != a[i + 1]) { if(j == k - 1) { printf("%d\n",a[i]); break; }else { j ++; } } } } return 0; } void quicksort(int *A, int begin, int end) { int pivot; if(begin < end) { pivot = partition(A, begin, end); quicksort(A, begin, pivot - 1); quicksort(A, pivot + 1, end); } } int partition(int *A, int left, int right) { int stand = A[left]; while(left < right) { while(left < right && A[right] >= stand) { right --; } if(left < right) { A[left ++] = A[right]; } while(left < right && A[left] <= stand) { left ++; } if(left < right) { A[right --] = A[left]; } } A[left] = stand; return left; }