当输入为pos时,期望cal函数返回false。但是cal函数alaways返回true。
#include <bits/stdc++.h>
using namespace std;
bool cal(string s)
{
int l=s.size();
if(l==1)
return false;
int l2=l/2;
if(l%2==0)
{
string s1=s.substr (0,l2);
string s2=s.substr(l2,l2);
if(s1==s2)
return true;
cal(s1);
cal(s2);
}
else
{
string s1=s.substr (0,l2);
string s2=s.substr(l2+1,l2);
if(s1==s2)
return true;
cal(s1);
cal(s2);
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
string s;
cin>>s;
bool a;
a=cal(s);
if(a==true)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
答案 0 :(得分:0)
在两个逻辑路径中,您调用 cal(s1)并丢弃该值,然后调用 cal(s2),同样忽略返回值。因此,你返回的是你没有明确订购的东西;我希望它是 cal(s2)的偶然价值。
你打算为那些s1!= s2?
的分支做什么?我不确定你要做什么;变弱的变量名称和缺乏评论让我们猜测你的预期行动。为什么 pos (无论你的意思是什么)输入返回false?
此外,您的代码中可能存在逻辑错误。看来你正在尝试将一个字符串分成两半;你打算丢失一个奇长字符串的中间字符吗?
string s1=s.substr (0,l2);
string s2=s.substr(l2+1,l2);