查找数组中的最小值(我的代码有啥问题?)

Posted

技术标签:

【中文标题】查找数组中的最小值(我的代码有啥问题?)【英文标题】:Finding the minimum value in an array (What's wrong with my code?)查找数组中的最小值(我的代码有什么问题?) 【发布时间】:2017-04-30 16:41:04 【问题描述】:

这是我对 C++ 课程的介绍。我们目前正在做数组,我正在尝试找到数组每一列的最小值。这是我所拥有的:

#include <iostream>
using namespace std;    

int main()
int grade[4][30] = 76, 70, 80, 90, 100, 83, 61, 63, 64, 65, 97, 69, 70, 79,60, 70, 80, 90, 100, 83, 61, 63, 99, 98, 66, 69, 70, 79,
                    74, 70, 80, 90,60, 61, 93, 88, 73, 65, 91, 69, 70, 79, 60, 70, 80, 90, 60, 83, 61, 63, 64, 65, 66, 69, 67, 74,
                    72, 70, 80, 90, 99, 84, 62, 63, 99, 65, 66, 69, 70, 79, 60, 70, 80, 90, 99, 83, 61, 63, 64, 65, 66, 69, 70, 77,
                    69, 70, 80, 90, 60, 61, 86, 63, 97, 97, 66, 69, 70, 79, 97, 70, 80, 90, 88, 83, 88, 63, 64, 65, 66, 69, 70, 79;

int a;
for(int x = 0; x < 4; ++x)
    a = grade[x][0];
    for(int y = 0; y < 30; ++y)
        if( a > grade[x][y])
            a = grade[x][y];
            cout << "a is " << a << " for the " << y << "time" << endl;
    cout << a << endl;



return 0;


我的问题是我不明白为什么在最后两个循环中值变为 0?真正的答案应该是每行 60。

P.S 我用它来找到最大值并且它起作用了,但是不明白为什么它在这里不起作用?

【问题讨论】:

写一个找到一维数组最小值的函数,然后使用该函数解决二维数组的问题怎么样?编程就是写函数。 这是您找到最小值的代码吗?如果没有,请改为包含它,因为这看起来是为了找到最大值。我也同意@NeilButterworth 的观点,即查找一维结果的函数会很有用 @Graeme:它的写法有误导性,但这实际上是在寻找最小值。不过,如果他将比较与if (grade[x][y] &lt; a) a = grade[x][y]; 颠倒过来,可能会更明显。 @JerryCoffin 啊,是的,我现在看到了。嗬!大脑似乎睡着了 @Graeme:如果有什么安慰的话,我已经准备好了答案,因为几分钟前,我开始写几乎相同的评论。 【参考方案1】:

for(int y = 0; y

这是因为例如您的第一个数组仅包含 28 个显式初始化元素,并且您迭代到 30 个(见上文)。没有自己初始化的元素被初始化为0。

【讨论】:

【参考方案2】:

您的数组初始值设定项少于 30 个数字。由于您的数组被声明为包含 30 个元素,因此其余条目设置为 0

由于您的数据中似乎没有 0,因此您可以使用 0 作为知道停止循环的标记。

【讨论】:

以上是关于查找数组中的最小值(我的代码有啥问题?)的主要内容,如果未能解决你的问题,请参考以下文章

查找数组中的 K 个最小元素

我是不是在查找数组中最小值的索引时引用或实例错误?

在我的 Java 代码中查找最大值和最小值

在数组中查找最小值 > 0

在数组中查找最小值 > 0

在数组中查找最大和最小数