在 for 循环中找到最小值并保留它的索引

Posted

技术标签:

【中文标题】在 for 循环中找到最小值并保留它的索引【英文标题】:Finding a minimum value in a for loop and keeping the index of it 【发布时间】:2012-06-07 22:35:02 【问题描述】:

我正在做一个家庭作业,我在一个“for”循环中计算一个函数 (f(x) = x * x – 12 * x + 40) 的整数区间中的值。我需要找到一个最小值。没关系,但我还需要保留值最小的索引号。目前我在另一个循环中再次重申该功能,但这看起来真的很混乱。我也可以导出 x 并使用已知最小值计算答案,但这也很奇怪,因为推导不是那么简单。你对我有什么建议吗?谢谢。

#include <iostream>
#include "limits.h"
using namespace std;

int main ()

    int lBound, uBound, y, min;

    cout << "Give the lower and the upper bounds of integer numbers: " << endl;
    cin >> lBound >> uBound;        

    min=INT_MAX;
    int x = lBound;
    for (int i = x; i <=uBound; i ++) 
        y = i * i - 12 * i + 40;
        cout << x << " " << y << endl;
        if (y<min) 
            min=y;
        
        x++;            
    
    for (int i = lBound; i <= uBound; i++) 
        y = lBound * lBound - 12 * lBound + 40;
        if (y==min) 
            y = lBound;
            i=uBound; // terminates the loop
        
        lBound++;
                   
    cout << "smallest value of the function is " << min << " for x = " <<  y << endl;                
    return 0;

【问题讨论】:

粘贴代码时请点击按钮。 (发帖前请先看预览。)询问作业时请使用作业标签。 这个问题我们无法给出正确答案,因为这是家庭作业。这完全取决于导师的意图。也许您应该使用微积分来找到最小值。 (毕竟,根据多项式,它们可能不是唯一值或整数值。)也许您应该将事物存储在数组中。都有优点和缺点,这可能与作业无关。 所以你设法将最小值“y”保存在“min”中,但想不出将“i”保存到“minI”变量中的方法? 我理解需要保存相应最小值的“i”。我无法理解的是 min 只有在循环过去后才知道,因此所有“i”也都过去了...... 【参考方案1】:

这里有一个提示:当你需要在程序中“保留一些东西”时,这意味着你需要将它存储在一个变量中。该变量是本地的、全局的还是传递的,取决于您需要保留它多长时间。这称为变量的“范围”。将任何变量的范围保持在最低限度被认为是一种很好的做法,因此指南不鼓励使用全局变量。

【讨论】:

+2。不,*** 的软件不允许 +2。也许 +3 会起作用....这是一个很好的答案。 好吧,这样我存储了最小值,但我只有在循环通过后才知道。抱歉,我仍然没有看到解决方案... 是的,你只知道它是循环完成后的最小值。 min() 充其量是一个 O(N) 算法,这意味着它随着数据点的数量而缩放。这就是生活。【参考方案2】:
        i=uBound; // terminates the loop

这不是一个很好的编码习惯。要终止循环,您应该使用像break 这样的流控制结构。在这种情况下这样做会保留最小元素的索引。

编辑:如果你想让i 比循环更有效,你只需要在外面声明它。也就是说:

改变

for (int i = lBound; i <= uBound; i++) 

int i; // variable exists outside loop
for (i = lBound; i <= uBound; i++) 

此外,仅供参考,循环边界通常指定为half-open intervals,以避免lboundubound 表示int 数据类型的限制的潜在问题。这意味着您通常使用&lt; 而不是&lt;=

不清楚你是上代数课还是CS课……

【讨论】:

不,因为i 超出范围。 感谢您的提示,这很有意义。 我知道这一点,我也可以将“i”分配给 for 循环之外的另一个变量,但它仍然不会导致解决方案附近的任何地方。这是我正在做的 C++ 入门课程。 感谢您的帮助。我被困在“盒子里”。明白了显而易见的事情后,我松了一口气。

以上是关于在 for 循环中找到最小值并保留它的索引的主要内容,如果未能解决你的问题,请参考以下文章

Java从for循环中找到最小值

尝试在数组中找到所有相等的最小值时出现真值错误,然后检索索引

如何在java中打印数组中的最小值? [复制]

如何找到三个(for循环)之间的最小值?

我想在 for 循环中找到最小值/最大值 [关闭]

使用 for 循环找到最小值