为什么此代码返回分段错误错误?

时间:2019-08-11 05:44:52

标签: c++

我正在编写这段代码来优化问题发生的时间,这是一个dp问题

给出的字符串S为:574674546476

对于索引1: 从5到字符串末尾的偶数为7,因此索引1的结果为7。

对于索引2: 从7到字符串末尾的偶数为7,因此索引2的结果为7。

对于索引3: 从4到字符串末尾的偶数为7,因此索引3的结果为7。

对于索引3: 从6到字符串末尾的偶数为6,因此索引4的结果为6。

...

这是我尝试过的代码,但在此代码中显示了分段错误

#include <bits/stdc++.h>
using namespace std;
int main()
{
    char str[10005];
    int i;
    cin >> str;
    int n = strlen(str);
    int arr[10005];
    for (i = 0; i < n; i++) {
        arr[i + 1] = str[i] - 48;
    }

    int tab[n + 1];

    if (arr[n] % 2 == 0) {
        tab[n] = 1;
    }
    else {
        tab[n] = 0;
    }

    for (i = n - 1; i >= 1; i++) {
        if (arr[i] % 2 == 0) {
            tab[i] = tab[i + 1] + 1;
        }
        else {
            tab[i] = tab[i + 1];
        }
    }
    for (i = 1; i <= n; i++) {
        cout << tab[i] << " ";
    }
}

我希望输出应该是

  

7 7 7 6 5 5 4 4 3 2 1 1

但是当我输入574674546476并想使用dp解决时,我编写了代码,它显示了分段错误。

1 个答案:

答案 0 :(得分:1)

    google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);

function drawChart() {

  var data = new google.visualization.DataTable();
   data.addColumn('string', 'Time of Day');
  data.addColumn('timeofday', 'Time of Day');
  data.addColumn('number', 'Emails Received');

  data.addRows([
    ['eee',[8, 30, 45], 5],
    ['eee',[9, 0, 0], 10],
  ]);

  var options = {
    title: 'Total Emails Received Throughout the Day',
    height: 450,
    series: {0:{type: 'line'}}
  };

  var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));

  chart.draw(data, options);
}

应该是

      for(i=n-1;i>=1;i++){

这可以解释崩溃的原因,但是当人们提交具有竞争力的代码时,您还会遇到两个常见错误

这不是标准的C ++头文件

      for(i=n-1;i>=1;i--){

在此代码中,您应该使用

#include<bits/stdc++.h>

这不是合法的C ++

#include <iostream>

因为在C ++数组中大小必须为编译时间常数,但是此处int tab[n+1]; 是一个变量。您应该使用

n

#include <vector>

相反。