`
xitong
  • 浏览: 6199389 次
文章分类
社区版块
存档分类
最新评论

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




未完待续

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics