[英]Why does this code return segmentation fault error?
我写这段代码是为了优化问题的时间,这是一个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 解决我编写代码时,它显示分段错误。
for(i=n-1;i>=1;i++){
应该
for(i=n-1;i>=1;i--){
这解释了崩溃,但是当人们提交有竞争力的代码时,我们也会看到两个常见错误
这不是标准的 C++ 头文件
#include<bits/stdc++.h>
在此代码中,您应该使用
#include <iostream>
这不是合法的 C++
int tab[n+1];
因为在 C++ 中数组大小必须是编译时常量,但这里n
是一个变量。 你应该使用
#include <vector>
和
vector<int> tab(n+1);
反而。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.