我干了很多遍代码,但是找不到问题。
#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个最小元素。
答案 0 :(得分:2)
如果最小的元素是最后一个元素,将会发生什么?您的情况就是这样:{9,8,5,10,2}
在每次迭代中,您都会找到最小的元素(2
)并将其分配给asc
的当前元素。结果为asc[] = {2, 2, 2}
(由k个相等的元素组成)。
答案 1 :(得分:-1)
伙计们,我是通过简单的排序完成的。我试图在不使用任何排序或任何递归的情况下做到这一点,但是似乎很困难,即使不是不可能。无论如何,谢谢您的帮助!