C++ 我能';你不出去兜圈子吗?

C++ 我能';你不出去兜圈子吗?,c++,for-loop,C++,For Loop,伙计们。 这是我在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) {

伙计们。 这是我在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);
}
#包括
使用名称空间std;
int mini=0xffffff;
int n;
字符串s1、s2;
布尔很好(字符串s)
{
对于(int i=1;i=s.size()-i;j--)
{
s1+=s[j];
}//这样行吗
对于(int k=s.size()-1-i;k>=s.size()-i-i;k--)//问题
{

coutt这个问题可以使用更多的例子结果。为什么最初要将“1”传递给f?我看不懂你的代码..我发现很难理解你想要实现什么。什么是“相邻冗余序列”?和b.t.w.是什么让你认为我们都是“家伙”。注意
size()
函数返回一个无符号的
size\u t
。因此,当
s
只有1个字符长(并且
i
大于零)时,
s.size()-1-i
可能会有问题。@Goodies噢,如果我让你感觉不好,我真的向你道歉。我以为“伙计们”是指这个社区中的人。@AdrianMole哦,我按照你的建议让程序正常运行。但是,我不明白一些要点。在我的程序中,isgood函数总是有2个以上的字符。但是为什么不允许使用s.size()?问题在于有符号(如
k
j
)和无符号之间的比较(如
s.size()-i-i
)类型。确切的问题将取决于
int
size\t
类型的相对大小。但我认为您的代码中还有其他问题。