如何解决二维数组声明上的 C++ 代码运行时错误
我不明白为什么这段代码会在输入任何测试用例时出现运行时错误(字符串的大小为 n,然后输入字符串)。甚至连“CHECK”这个词(在 solve() 函数中)都没有打印出来.. 请帮忙!
#include <bits/stdc++.h>
using namespace std;
int a[1000][26];
int mov(int l,int u,int x)
{
if(l==u)
{
if(a[l][x]-a[l-1][x]==1)
return 1;
else
return 0;
}
int m=(l+u)/2;
return max(mov(l,m,x+1)+a[u][x]-a[m][x],mov(m,u,x+1)+a[m][x]-a[l-1][x]);
}
void solve()
{
int i,k,j,n;
string str;
cin >> n >> str;
cout << "CHECK";// This is not getting printed
for(i=0;i<26;i++)
a[0][i]=0;
for(i=1;i<n+1;i++)
{
for(j=0;j<26;j++)
{
a[i][j]=a[i-1][j];
if(str[i-1]==j+'a')
a[i][j]++;
}
}
k=mov(1,n,0);
cout << n-k << "\n";
}
int main()
{
int t=1;
cin >> t;
while(t--)
solve();
}
解决方法
您的第一个输入显示将提供多少个输入“对”。在您的情况下,您已跳过这一部分并开始收集输入“对”。这就是“CHECK”不会被打印的原因。要解决此问题,请使用 cin
来捕获输入对的数量,然后遍历输入以获取对。
void solve()
{
int i,k,j,n;
string str;
memset(a[0],sizeof(int) * 26); // Use this instead.
cin >> n;
cout << "CHECK";
for (i = 1; i < n + 1; i++)
{
cin >> j >> str;
for (j = 0; j < 26; j++)
{
a[i][j] = a[i - 1][j];
if (str[i - 1] == j + 'a')
a[i][j]++;
}
}
k = mov(1,n,0);
cout << k << "\n";
}
另外,尽量不要使用 using namespace std;
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。