马克是一名本科生,他对轮换感兴趣。马克希望赢得一个传送带比赛正在进行。在比赛中,有一条传送带,可以表示为1xN块的条带。每个块上都写有一个数字。皮带保持旋转,每次旋转后,每个程序段都会向左移动,第一个程序段将转到最后位置。
传送带附近有一个开关可以阻止皮带。每个参与者都有一次机会阻止腰带,他的PMEAN将被计算出来。
PMEAN使用皮带停止时的顺序计算。具有最高PMEAN的参与者是赢家。可以有多个获胜者。
马克希望成为赢家之一。他应该尝试哪种PMEAN来保证他成为赢家。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main (void)
{
int n;
cin>>n;
vector <int> foo;
int i = 0,j = 0,k,temp,fal,garb=0;
while (i < n)
{
cin>>fal;
foo.push_back(fal);
i++;
}
vector<int> arr;
//arr.reserve(10000);
for ( i = 0; i < n; i++ )
{
garb = i+1;
arr.push_back(garb);
}
long long product = 0;
long long bar = 0;
while (j < n)
{
i = 0;
temp = foo[0];
while ( i < n-1 )
{
foo[i] = foo[i+1];
i++;
}
foo[i] = temp;
for ( k = 0; k < n; k++ )
bar = bar + arr[k]*foo[k];
if ( bar > product )
product = bar;
j++;
}
return 0;
}
我正在做的是基本上尝试原始数组的不同组合,然后将其与包含值1 2 3 ......
的数组相乘,然后返回最大值。但是,我在这里遇到了分段错误。
为什么会这样?
答案 0 :(得分:3)
以下是您的部分代码:
vector <int> foo;
int i = 0;
while (i < n)
{
cin >> fal;
foo[i] = fal;
i++;
}
执行foo[0] = fal
时,会导致未定义的行为。 foo
[0]
还没有vector<int> arr;
空间。您可能希望改为使用std::vector::push_back()
。
当您使用for (int i=0; i<n; i++) {
int fal;
cin >> fal;
foo.push_back(fal);
}
另外,人们通常会使用for循环编写该循环:
i
With regards to the updated code:
garb
。