首页 > 试题广场 >

输入n个整数,输出其中最小的k个

[编程题]输入n个整数,输出其中最小的k个
  • 热度指数:182667 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入n个整数,找出其中最小的k个整数并按升序输出

本题有多组输入样例

数据范围: ,输入的整数满足

输入描述:

第一行输入两个整数n和k
第二行输入一个整数数组



输出描述:

从小到大输出最小的k个整数,用空格分开。

示例1

输入

5 2
1 3 5 7 2

输出

1 2
#include <stdio.h>

int main() {
    int n=0,k=0,vol[10000]={0};
    scanf("%d %d",&n,&k);
    for (int i=0; i<n; i++) {
    scanf("%d",&vol[i]);
    }
    for (int i=0; i<k; i++) {
        for (int j=i+1; j<n;j++) {
            if (vol[i]>vol[j]) {
            int temp=vol[i];
            vol[i]=vol[j];
            vol[j]=temp;
            }
        }
        printf("%d ",vol[i]);
    }
}
编辑于 2024-03-22 14:23:58 回复(0)
#include <stdio.h>
int main() {
    int n, k, a[10000] = {0};
    scanf("%d %d",&n,&k);
    for(int i = 0; i<n; i++)scanf("%d",&a[i]);
    for(int i = 0; i<k; i++){
        for(int j = i+1; j<n; j++){
            if(a[i]>a[j]){
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
        printf("%d ",a[i]);
    }
    return 0;
}

发表于 2023-12-02 15:05:47 回复(0)
#include <stdio.h>

int main() {
    int n, k;
    while (scanf("%d %d", &n, &k) != EOF) {
        int arr[1000] = {0};
        for(int i = 0;i<n;i++)
        {
            scanf("%d",&arr[i]);
        }
        for(int i = 0;i<n-1;i++)
        {
            for(int j = 0;j<n-1-i;j++)
            {
                if(arr[j]-arr[j+1]>0)
                {
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
        for(int i = 0;i<k;i++)
        {
            printf("%d ",arr[i]);
        }
    }
    return 0;
}
发表于 2023-10-11 14:36:05 回复(0)
用的冒泡排序阿

#include <stdio.h>

int main() {
    int n, k,w;
    while (scanf("%d %d", &n, &k) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to
        int a[n];
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        for(int i=0;i<n-1;i++)
        {
            for(int j=0;j<n-1-i;j++)
            {
                if(a[j]>a[j+1])
                {
                    w=a[j];
                    a[j]=a[j+1];
                    a[j+1]=w;
                }
            }
        }
        for(int i=0;i<k;i++){
            printf("%d ",a[i]);
        }

    }
    return 0;
}
发表于 2023-07-16 16:27:26 回复(0)
解题思路,既然要求最小的k个整数,那么干脆先对n个数进行小到大排序,然后再输出前k个整数。
求最小的k个整数,所以只进行k次排序
代码:
#include <stdio.h>

int main() {
    int n,k;
    int a[1000];
    int temp;
    int j;
    scanf("%d %d",&n,&k);   //接收n和k,注意中间有空格
    for(int i = 0; i < n; i++){
        scanf("%d ",&temp); //接收n个整数
        a[i] = temp;
    }
    
    for(int i = 0; i < k; i++){     //k次小到大排序
        for( j = i; j < n; j++){
            if((a[i] >= a[j])){
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
        printf("%d ",a[i]); //求出的最小值进行输出
    }

    return 0;
}

发表于 2022-10-18 21:59:33 回复(0)
#include <stdio.h>

int main(){
    int n;int k;int t;
    scanf("%d %d",&n,&k);
    int a[n];int i=0;
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(int  j=0;j<k;j++){//选择排序排到第k次就可以输出了
        for(int p=j+1;p<n;p++){
            if(a[j]>a[p]){
                t=a[j];
                a[j]=a[p];
                a[p]=t;
            }
        }
    }
    for(int j=0;j<k;j++){
        printf("%d ",a[j]);
    }
}


发表于 2022-06-02 17:45:49 回复(0)
#include <stdio.h>
#define    N    1000
int main()
{
    int arr[N],n,k,i,j,min,temp;
    scanf("%d%d",&n,&k);
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    for(i=0;i<n-1;i++)
    {
        min=i;
        for(j=i+1;j<n;j++)
        {
            if(arr[min]>arr[j])
            {
                min=j;
            }
        }
        if(min!=i)
        {
            temp=arr[i];
            arr[i]=arr[min];
            arr[min]=temp;
        }
    }
    for(i=0;i<k;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}
选择排序
发表于 2022-04-21 11:05:22 回复(0)
#include <stdio.h>
void BubbleSort(int array[], int len);
int main() {
    int n, k;
    scanf("%d %d", &n, &k);
    int value[n];
    for (int i = 0; i < n; i++)
        scanf("%d", &value[i]);
    BubbleSort(value, n);
    for (int i = 0; i < k; i++)
        printf("%d ", value[i]);
}
// 升序排列
void BubbleSort(int array[],int len) {
    int tem;
    //外层循环控制 排序的趟数 n个元素排序需要循环n-1次 【1】 
    for(int i=0;i<len-1;i++) {
        //内层循环控制比较的次数 n个元素第i趟比较n-i次 【2】
        for(int j=0;j<len-1-i;j++) {
            //比较相邻的元素大小 目的:将最大的元素选出到移动到最后 
            if(array[j]>array[j+1]){
                tem = array[j];
                array[j] = array[j+1];
                array[j+1] = tem;
            }
        }
    }
}

发表于 2022-04-20 01:18:17 回复(0)
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
    int n,k;
    while(scanf("%d %d",&n,&k)!=EOF)
    {
        int tmp[n];
        scanf("%d",&tmp[0]);
        for (int i=1;i<n;i++)
        {
            scanf("%d",&tmp[i]);
            for (int j=i;j>0;j--)
            {
                if (tmp[j]<tmp[j-1])
                {
                    int tmp1 =tmp[j];
                    tmp[j]=tmp[j-1];
                    tmp[j-1]=tmp1;
                }
                else
                {
                    break;
                }
            }
        }
        for (int a=0;a<k;a++)
        {
            printf("%d ",tmp[a]);
        }
        printf("\n");
    }
    return 0;
}
求助:
scanf("%d",&tmp[0]);
for (int i=1;i<n;i++)

&tmp[0]为什么是0,int i =1为什么是1

发表于 2022-03-25 14:52:25 回复(0)
 快排
#include <stdio.h>

void Quicksort(int num[], int low, int high){
    if(low<high){
        int pivotpos = partition(num, low, high);
        Quicksort(num, low, pivotpos-1);
        Quicksort(num, pivotpos+1, high);
    }
}


int partition(int num[], int low, int high){
    int pivot = num[low];
    while(low < high){
        while(low<high && num[high]>=pivot){
            --high;
        }
        num[low] = num[high];
        while(low<high && num[low]<=pivot){
            ++low;
        }
        num[high] = num[low];
    }
    num[low] = pivot;
    return low;
}

int main(){
    int n, a, i, j, k;
    while(scanf("%d %d", &n, &k) != EOF){
        int num[n];
        for(i=0; i<=n; i++){
            scanf("%d", &num[i]);
        }
        Quicksort(num, 0, n-1);
        for(i=0; i<k; i++){
            printf("%d ", num[i]);
        }
    }
    return 0;
}

发表于 2022-03-12 16:46:47 回复(0)
hash排序
#include <stdio.h>
int main()
{
    int n,k;
    int arr[10001] = {0};
    int i,j;
    while(EOF!=scanf("%d %d",&n,&k))
    {
        memset(arr,0,sizeof(arr));
        for(i=0;i<n;i++)
        {
            scanf("%d",&j);
            arr[j]++;
        }
        for(i=0;k>0&&i<10001;i++)
        {
            while(arr[i]>0)
            {
                arr[i]--;
                k--;
                printf("%d ",i);
            }
        }
        printf("\n");
    }
    
    return 0;
}


发表于 2022-01-10 20:44:10 回复(1)
//最笨的办法:先冒泡排序完毕,再输出前k个
#include<stdio.h>
int main()
{
    int i,j,n,k;
    int a[1000];
    while(scanf("%d",&n)!=EOF)
    {
        scanf("%d",&k);
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        for(i=0;i<n;i++)
        {
            for(j=0;j<i;j++)
            {
                if(a[i]<a[j])
                {
                    int temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                }
            }
        }
        for(i=0;i<k;i++)
        printf("%d ",a[i]);
        printf("\n");
    }
}

发表于 2021-09-01 22:35:01 回复(1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int comp(const void *a,const void *b)
{
    return *(int *)a-*(int *)b;
}
int main()
{
    int n,k;
    int i,j;
    while(scanf("%d %d",&n,&k)!=EOF)
    {
        int *a=(int *)malloc(sizeof(int)*n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        qsort(a,n,sizeof(int),comp);
        for(i=0;i<k;i++)
        {
            printf("%d ",a[i]);
        }
        printf("\n");
    }
    return 0;
}

发表于 2021-07-15 22:23:42 回复(0)

问题信息

难度:
15条回答 38224浏览

热门推荐

通过挑战的用户

查看代码