首先看一下题
描述
输入n个整数,找出其中最小的k个整数并按升序输出
本题有多组输入样例
数据范围: 1≤n≤1000 ,输入的整数满足 1≤val≤10000
输入描述:
第一行输入两个整数n和k
第二行输入一个整数数组输出描述:
从小到大输出最小的k个整数,用空格分开。
示例1
输入:
5 2 1 3 5 7 2输出:
1 2
一、问题分析
首先读题,仔细看描述中的内容,发现需求是
1.输入n个整数,找出其中最小的k个整数并按升序输出
2.本题有多组输入样例
3.数据范围:n大于等于1小于等于1000,输入的整数满足val大于等于1小于等于10000
4.输入描述:第一行输入两个整数n和k
第二行输入一个整数数组
5.输出描述:从小到大输出最小的k个整数,用空格分开。
二、解题思路
1.首先我们包含标准输入输出库#include <stdio.h>
2.然后我们进入主函数int main()
3.主函数中我们定义一个n一个k,int n, k;
4.while(scanf("%d %d", &n, &k) != EOF) 当没有读取到文档末尾
5.我们定义一个数组int arr[n]
6.for(int i = 0; i < n; i++)
scanf("%d", &arr[i]);
7.我们使用qsort函数对函数进行排序
8.qsort(arr, n, sizeof(int), compare);
9.输出前k个整数(最小的k个)
for(int i = 0; i < k - 1; i++) {
printf("%d ",arr[i]);
}
printf("%d\n", arr[i]);
return 0;
10.注意qsort函数的写法
int compare(const void* a, const void* b) {
const int* inta = (const int*)a;
const int* intb = (const int*)b;
return *inta - *intb;
}
三、具体步骤
使用的语言是C
#include <stdio.h>
#include <stdlib.h>
int compare(const void* a, const void* b) {const int* inta = (const int*)a;const int* intb = (const int*)b;return *inta - *intb;
}int main() {int n, k;while (scanf("%d %d", &n, &k) != EOF) { int arr[n];for(int i = 0; i < n; i++) {scanf("%d", &arr[i]);}qsort(arr, n, sizeof(int), compare);for(int i = 0; i < k - 1; i++) {printf("%d ", arr[i]);}printf("%d\n", arr[k - 1]);}return 0;
}