【发布时间】:2021-01-03 11:42:51
【问题描述】:
作为 C 程序的一部分,我编写了以下函数,它找到数组的第二小元素
unsigned int array_second_min (unsigned int w[], unsigned int n)
{
unsigned int i, erst = UINT_MAX, zweit = UINT_MAX, count = 0;
if (n < 2)
return UINT_MAX;
for (i = 0;i < n; i++) {
if (w[i] == w[i + 1])
count++;
}
if (count == n - 1)
return UINT_MAX;
for (i = 0;i < n;i++) {
if (w[i] < erst)
erst = w[i];
}
for (i = 0;i < n;i++) {
if (w[i] == erst)
continue;
if ((w[i] - erst) < zweit)
zweit = w[i];
}
return zweit;
}
问题在于它并没有真正发挥应有的作用。我认为问题出在最后一个 for 循环中,但不确定。
感谢您的帮助
输出图片:
【问题讨论】:
-
你能提供一个失败的例子吗?我无法复制它。
-
离题:如果你想让别人阅读你的程序,请确保他们理解标识符的含义。主题:您不需要三个循环。只需查看一次数组就足够了。你也不需要任何算术。将两个元素的差异与第三个元素进行比较是完全没有意义的。
-
@dspr 刚刚附上了输出的照片
-
@n.'pronouns'm。一次运行时的逻辑是什么?
-
@Ozk 基本上你只是废弃你的第一个循环并将你的最后两个循环合并为一个。有关详细信息,请参阅您获得的answer。