您的位置:首页 > 其它

九度OJ 题目1174:查找第K小数

2013-02-11 20:50 260 查看
题目1174:查找第K小数

时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:2195

解决:869

题目描述:

查找一个数组的第K小的数,注意同样大小算一样大。

如 2 1 3 4 5 2 第三小数为3。

输入:

输入有多组数据。

每组输入n,然后输入n个整数(1<=n<=1000),再输入k。

输出:

输出第k小的整数。

样例输入:
6
2 1 3 5 2 2
3


样例输出:
3


来源:2010年北京邮电大学网院研究生机试真题

/*********************************
*   日期:2013-2-11
*   作者:SJF0115
*   题号: 九度OJ 题目1174:查找第K小数
*   来源:http://ac.jobdu.com/problem.php?pid=1174
*   结果:AC
*   来源:2010年北京邮电大学计算机研究生机试真题
*   总结:
**********************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//排序函数
int cmp(const void *a,const void *b){
	return *(int *)a - *(int *)b;
}

int main()
{
	int n,k,i;
	int array[1001];
	//freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);
    while(scanf("%d",&n) != EOF)
    {
		//输入数据
		for(i = 0;i < n;i++){
			scanf("%d",&array[i]);
		}
		scanf("%d",&k);
		//排序
		qsort(array,n,sizeof(array[0]),cmp);
		int index = 1,flag = 0;
		//查找
		for(i = 1;i < n;i++){
			if(array[i] != array[i-1]){
				index ++;
				if(index == k){
					printf("%d\n",array[i]);
					flag = 1;
					break;
				}
			}
		}
		//数组中数全相等或n = 1 情况
		if(flag == 0){
			printf("%d\n",array[0]);
		}
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: