C++ 我能';你不出去兜圈子吗?
伙计们。 这是我在stackoverflow中的第一个问题。 这段代码是用于程序求解的代码,问题是找到没有相邻冗余序列的最小序列。输入是序列的长度,序列应该只有1、2、3。 例如,如果输入7,则输出应为1213121。 现在,我真正的问题是关于for循环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) {
#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
类型的相对大小。但我认为您的代码中还有其他问题。