我干跑了代码很多次,但找不到问题。
#include <stdio.h>
int main()
{
int arr[] = {9,8,5,10,2};
int i, j, k, small;
scanf("%d", &k);
int n=5;
int asc[k];
if(k<n)
{
for(i=0; i<k; i++)
{
small=arr[i];
for(j=i; j<n; j++)
{
if(arr[j]<small)
{
small=arr[j];
}
}
asc[i]=small;
}
printf("%d", asc[k-1]);
}
return 0;
}
输出应返回第 k 个最小元素。我还创建了一个数组“asc”,在每次外循环迭代后按升序存储最小元素。
输出 - 每次 2
预期 - 当插入任何小于 n 的值(k)时,它应该返回第 k 个最小的元素。
最佳答案
如果最小的元素是最后一个会发生什么?这就是你的情况:{9,8,5,10,2}
在每次迭代中,您都会找到最小的元素 (2
) 并将其分配给 asc
的当前元素。结果是 asc[] = {2, 2, 2}
(由 k 个相等的元素组成)。
关于c - 第 k 个最小元素 - 这段代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56653290/