MyException - 我的异常网
当前位置:我的异常网» 编程 » 9度OJ 题目1174:查找第K小数

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

www.MyException.Cn  网友分享于:2013-02-20  浏览:3次
九度OJ 题目1174:查找第K小数

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


文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有