我有一个长度为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;
}
答案 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
执行您需要的操作。
希望这可能会有所帮助。