gpt4 book ai didi

c++ - 为什么我会遇到段错误?

转载 作者:行者123 更新时间:2023-11-28 00:25:37 25 4
gpt4 key购买 nike

问题陈述

马克是一名本科生,他对轮岗很感兴趣。小镇上正在进行传送带比赛,马克想赢。在比赛中,有一条传送带可以表示为一条 1xN 的方 block 。每个 block 上都写有一个数字。传送带不断旋转,每次旋转后,每个 block 都向其左侧移动,第一个 block 移动到最后一个位置。

传送带附近有一个开关可以停止传送带。每个参与者都有一次停止皮带的机会,然后计算他的 PMEAN。

PMEAN 是使用皮带停止时的序列计算的。 PMEAN 最高的参赛者获胜。可以有多个获胜者。

马克想成为赢家之一。他应该努力获得什么 PMEAN 才能保证他成为赢家。

定义

  • PMEAN =(i = 1 到 n 的总和)(i * 列表中的第 i 个数)其中 i 是传送带停止时 block 的索引。索引从 1 开始。

输入格式

  • 第一行包含 N,表示腰带上的元素数。
  • 第二行包含 N 个以空格分隔的整数。

输出格式

  • 输出所需的PMEAN

约束

  • 1 ≤ N ≤ 10^6
  • -10^9≤每个数≤10^9

代码

#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 ...... 的数组相乘,然后返回最大值。但是,我遇到了段错误。

为什么会这样?

最佳答案

这是您的一些代码:

vector <int> foo;
int i = 0;
while (i < n)
{
cin >> fal;
foo[i] = fal;
i++;
}

当你做 foo[0] = fal ,你会导致未定义的行为。 foo 没有空间了对于 [0]然而。您可能想使用 std::vector::push_back() 相反。

当您处理 vector<int> arr; 时,也会出现同样的问题。


顺便说一句,人们通常会使用 for 循环编写该循环:

for (int i=0; i<n; i++) {
int fal;
cin >> fal;
foo.push_back(fal);
}

With regards to the updated code :

  • 你永远不会增加 i在第一个循环中。
  • garb从未初始化。

关于c++ - 为什么我会遇到段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com