检查数组的邻居值

时间:2018-05-30 19:17:48

标签: c++ arrays

我有一个长度为L的数字数组,我必须让程序检查每个数组元素与其前后邻居的总和。

因此,例如,如果我的数组为{1, 2, 3},则第二个元素的输出应为6,因为1 + 2 + 3 = 6并且它们都是邻居。

如果所选元素是数组中的第一个元素,则其前一个邻居是数组的最后一个元素,如果该元素是数组中的最后一个元素,则以下邻居是该数组的第一个元素。因此,在{1, 2, 3}示例中,无论您检查的是哪个号码,都会获得6,但如果是{1, 2, 3, 4},则第3个元素的答案为9 }因为3 + 2 + 4 = 9

我希望你明白它应该如何运作。

我遇到的问题是输出失控。我试图检查阵列本身,这是完全正常的。在{1, 2, 3}示例中,我得到7208681的输出,我不知道为什么。

#include <iostream>

using namespace std;

int main()
{
    int total;
    cin >> total;
    int Bush[total]; //array of numbers

    int temp, output = 0; //output variable and a container for the last resurt a.k.a temp

    for (int i = 0; i <= total - 1; i++)
    {
        cin >> Bush[i]; //inputting the array elements
    }
    for (int i = 0; i < total; i++)
    {
        if (i == 0)
            output = Bush[i] + Bush[i + 1] + Bush[total]; //checking if the loop checks the first number
        if (i == total - 1)
            output = Bush[i] + Bush[0] + Bush[i - 1]; //checking if the loop checks the first number

        temp = output;                                //assigning the temp value to the current output value
        output = Bush[i] + Bush[i + 1] + Bush[i - 1]; //assigning a new output value

        if (temp > output)
            output = temp; //checking values
    }

    cout << output << endl; //outputting
    return 0;
}

4 个答案:

答案 0 :(得分:1)

i = 0时,表达式Bush[i-1]会导致访问数组(- 1)的无效位置。

同样,当i = total - 1(迭代的最后一个索引)时,表达式Bush[i+1]会为您提供一个超出数组范围的total索引。

答案 1 :(得分:0)

Bush的最后一个元素位于索引total -1,但您在Bush[total]

时访问i==0

答案 2 :(得分:0)

我认为以下代码可行

int main()
{
int total;

cout << "Enter Number of Elements " << endl;
cin>>total;
int Bush[total];//array of numbers
int temp = 0, output = INT_MIN; //output variable and a container for the last resurt a.k.a temp
cout << "Enter the Elements " << endl;

for(int i = 0; i<=total - 1; i++)
{
    cin>>Bush[i];//inputting the array elements
}
for(int i = 0; i<total; i++)
{
    if(i == 0)
        temp = Bush[i] + Bush[i+1] + Bush[total -1];//checking if the loop checks the first number

    else if(i == total - 1)
        temp = Bush[i] + Bush[0] + Bush[i-1];//checking if the loop checks the first number
    else
        temp = Bush[i] + Bush[i+1] + Bush[i-1]; //assigning the temp value to the current output value

    output = (temp > output)?temp:output;

}
cout<<output<<endl;//outputting
return 0;
}

答案 3 :(得分:0)

最后,您的代码中存在许多错误,但if / else结构存在问题。

我建议你使用另一个基于模块运算符的内循环来简化代码:

int max = 0;
for(int i = 0; i<total; i++)
{
  output = Bush[i] + Bush[(i+1)%total] + Bush[(i-1+total)%total];
  if(max < output) max = output;//checking the max
}
cout<<max<<endl;//outputting

执行您需要的操作。

希望这可能会有所帮助。