调试关于排列的程序
Debug on Program about Permutation
最近我在写一个程序来生成固定数量的输入字母排列。比如我输入3、3、ABC,程序会按照字典序输出ABC、ACB、BAC。但是程序无法通过所有测试用例,我无法找出错误在哪里。请帮忙。
#include <iostream>
using namespace std;
int used[26], cou = 0, k, n, i;
string output;
string sorting(string x, int y)
{
char temp;
int i, j;
for (i = 0; i < y; ++i)
{
for (j = 0; j < y-1; ++j)
{
if (x[j]-'0' > x[j+1]-'0')
{
temp = x[j];
x[j] = x[j+1];
x[j+1] = temp;
}
}
}
return x;
}
void out(int x, string y)
{
int i;
if (cou == k)
{
return;
}
if (x == n+1)
{
cout << output << endl;
++cou;
}
else
{
for (i = 0; i < n; ++i)
{
if (used[i] == 0)
{
used[i] = 1;
output[x-1] = y[i];
out(x+1, y);
used[i] = 0;
}
}
}
}
int main()
{
char inpi;
string inp, ha;
cin >> n >> k >> inp;
output.resize(n);
for (i = 0; i < 26; ++i)
{
used[i] = 0;
}
inp = sorting(inp, n);
out(1, inp);
}
我不确定我是否理解问题。
撇开算法不说,你应该知道一个标准的字符串是可以判断多长的。因此 sorting
中的 y
参数是多余的。使用 x.size()
查找尺寸。
另一个问题是output[x] = y[i];
。您没有设置 output
的大小:它是零。由于您正在寻找排列,我假设它的大小必须等于 y
的大小:output.resize( y.size() );
.
最后一件事:使用有意义的标识符。 y
可能对编译器有好处;对于一个人来说,它可能定义了糟糕的一天。
似乎没有必要像您那样创建全局
string output;
创建一个字符串以在 main() 中捕获输出并通过引用将其传递给需要它们的函数,在本例中为 fill()
要么
在 fill() 和 return 中创建它,一旦它被填充
最近我在写一个程序来生成固定数量的输入字母排列。比如我输入3、3、ABC,程序会按照字典序输出ABC、ACB、BAC。但是程序无法通过所有测试用例,我无法找出错误在哪里。请帮忙。
#include <iostream>
using namespace std;
int used[26], cou = 0, k, n, i;
string output;
string sorting(string x, int y)
{
char temp;
int i, j;
for (i = 0; i < y; ++i)
{
for (j = 0; j < y-1; ++j)
{
if (x[j]-'0' > x[j+1]-'0')
{
temp = x[j];
x[j] = x[j+1];
x[j+1] = temp;
}
}
}
return x;
}
void out(int x, string y)
{
int i;
if (cou == k)
{
return;
}
if (x == n+1)
{
cout << output << endl;
++cou;
}
else
{
for (i = 0; i < n; ++i)
{
if (used[i] == 0)
{
used[i] = 1;
output[x-1] = y[i];
out(x+1, y);
used[i] = 0;
}
}
}
}
int main()
{
char inpi;
string inp, ha;
cin >> n >> k >> inp;
output.resize(n);
for (i = 0; i < 26; ++i)
{
used[i] = 0;
}
inp = sorting(inp, n);
out(1, inp);
}
我不确定我是否理解问题。
撇开算法不说,你应该知道一个标准的字符串是可以判断多长的。因此 sorting
中的 y
参数是多余的。使用 x.size()
查找尺寸。
另一个问题是output[x] = y[i];
。您没有设置 output
的大小:它是零。由于您正在寻找排列,我假设它的大小必须等于 y
的大小:output.resize( y.size() );
.
最后一件事:使用有意义的标识符。 y
可能对编译器有好处;对于一个人来说,它可能定义了糟糕的一天。
似乎没有必要像您那样创建全局
string output;
创建一个字符串以在 main() 中捕获输出并通过引用将其传递给需要它们的函数,在本例中为 fill() 要么 在 fill() 和 return 中创建它,一旦它被填充