关于排列的程序调试

时间:2016-02-04 11:23:07

标签: c++ 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);
}

2 个答案:

答案 0 :(得分:1)

我不确定我是否明白这个问题。

将算法放在一边,您应该知道标准字符串能够判断多长时间。因此y中的sorting参数是多余的。使用x.size()查找尺寸。

另一个问题是output[x] = y[i];。您没有设置output的大小:它为零。由于您正在寻找排列,我认为它的大小必须等于y的大小:output.resize( y.size() );

最后一件事:使用有意义的标识符。 y可能对编译器有用;对于一个人来说,它可能会定义一个糟糕的一天。

答案 1 :(得分:0)

似乎没有必要像你一样创建全局     string output;

创建一个字符串以捕获main()中的输出,并通过引用将它传递给需要它们的函数,在本例中为fill() 要么 在fill()中创建它,并在填充后按值返回