【发布时间】:2021-01-26 15:38:08
【问题描述】:
我不明白为什么这段代码会在输入任何测试用例时出现运行时错误(字符串的大小为 n,然后输入字符串)。甚至连单词“CHECK”(在solve()函数中)都没有被打印出来。请帮忙!
问题链接是:problem
#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();
}
【问题讨论】:
-
为什么要在
main()中为单个函数调用使用 while 循环?只需致电solve()。 -
对您正在尝试完成的任务的问题描述,而不仅仅是您认为的问题也很好。 How to Ask
-
当
l永远不会等于u时会发生什么?它将无限期地递归运行。 -
问题链接为:link
-
编辑问题,并将问题文本放入其中。否则这将被关闭。
标签: c++ arrays runtime-error