在for循环中查找最小值并保持其索引

时间:2012-06-03 15:04:53

标签: c++ for-loop minimum

我正在做一个家庭作业,我在'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;
}

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

        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++) {

此外,仅仅是FYI,循环边界通常被指定为half-open intervals,以避免lboundubound代表int数据类型限制的潜在问题。这意味着您通常使用<代替<=

目前尚不清楚你是在代数课还是CS课......