伙计们。 这是我在 stackoverflow 中的第一个问题。 这段代码是用于程序求解的代码,问题是要求找到其中没有相邻冗余序列的最小序列。输入是序列的长度,序列应该只有 1、2、3。 例如,如果我输入 7,则输出应为 1213121。 现在,我真正的问题是关于 for 循环。
#include <bits/stdc++.h>
using namespace std;
int mini = 0xffffff;
int n;
string s1, s2;
bool isgood(string s)
{
for(int i=1;i<=s.size()/2;i++)
{
s1 = "";
s2 = "";
for(int j=s.size()-1;j>=s.size()-i;j--)
{
s1 += s[j];
} //this works ok
for(int k=s.size()-1-i;k>=s.size()-i-i;k--)//Problem
{
cout<<"*** "<<k<<endl; //I printed the k, and it printed 0, -1, -2, -3......, and it didn't go out.
s2 += s[k];
}
if(s1.compare(s2)==0)
{
return false;
}
}
return true;
}
void f(string s)
{
if(s.size()==n)
{
if(mini>stoi(s))
{
mini=stoi(s);
}
return;
}
else
{
for(int r=1;r<=3;r++)
{
if(isgood(s+char(r+'0'))==true)
{
f(s+char(r+'0'));
}
}
}
}
int main()
{
scanf("%d", &n);
f("1");
printf("%d", mini);
}
正如你在我的代码中看到的,有一个 for,但它没有消失。 当我将其更改为 for(int k=s.size()-1-i;k>s.size()-ii-1;k--) 时,它并没有达到确切的目标,但程序有效. 请帮我看看是什么问题,我该如何解决。