最近我正在编写一个程序来生成输入的固定数量的字母排列。例如,我输入了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);
}
答案 0 :(得分:1)
我不确定我是否明白这个问题。
将算法放在一边,您应该知道标准字符串能够判断多长时间。因此y
中的sorting
参数是多余的。使用x.size()
查找尺寸。
另一个问题是output[x] = y[i];
。您没有设置output
的大小:它为零。由于您正在寻找排列,我认为它的大小必须等于y
的大小:output.resize( y.size() );
。
最后一件事:使用有意义的标识符。 y
可能对编译器有用;对于一个人来说,它可能会定义一个糟糕的一天。
答案 1 :(得分:0)
似乎没有必要像你一样创建全局
string output;
创建一个字符串以捕获main()中的输出,并通过引用将它传递给需要它们的函数,在本例中为fill() 要么 在fill()中创建它,并在填充后按值返回