列表

详情


OR60. n个数里最小的k个

描述

找出n个数里最小的k个

输入描述

每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n 不超过100。

输出描述

输出n个整数里最小的k个数。升序输出

示例1

输入:

3 9 6 8 -10 7 -11 19 30 12 23 5

输出:

-11 -10 3 6 7

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 300KB, 提交时间: 2020-08-04

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int main()
{
	int a[N + 1];
	int i = 0,j = 0;
	int len = 0;
	int temp;
	while (scanf("%d", a + i) != EOF) {
		i++;
	}
	len = i - 1;
	int k = a[i - 1];
	for(i=0;i<len;i++){
        for(j=i+1;j<len;j++){
            if (a[i]>a[j]){
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }

        }
	}
	for(i=0;i<k;i++){
        if(i<k-1)
            printf("%d ",a[i]);
        else
            printf("%d",a[i]);
	}
	printf("\n");
	return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2018-08-24

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100 
int main()
{
	int a[N + 1];
	int i = 0,j = 0;
	int len = 0;
	int temp;
	while (scanf("%d", a + i) != EOF) {
		i++;
	}
	len = i - 1;
	int k = a[i - 1];
	for (i = 0; i<len; i++)
	{
		for(j = i + 1;j < len; j++)
		{
			if (a[i] > a[j])
			{
				temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
	for (i = 0;i<k; i++)
	{
		if (i<k - 1)
			printf("%d ", a[i]);
		else
			printf("%d", a[i]);
	}
	printf("\n");
	return 0;
}

上一题