下一个N长自然数系列的排列

时间:2014-11-10 18:32:59

标签: c++ algorithm permutation

问题是1,2,...,n的排列,以字典顺序生成下一个排列。例如,对于2 3 1 4,答案是2 3 4 1.

我的代码是,

void read(int *l, int* size) {
    char buf[2900];
    *size = 0;
    char *in = buf;
    int *out = l;
    //cin.sync();
    cin.getline(buf, 2900);
    do {
        *out = 0;
        while (*in >= '0' && *in <= '9') {
            *out = *out * 10 + (*in - '0');
            in++;
        }
        if (*in)
            in++;
        ++out;
    } while (*in);
    *size = out - l;
}

int main() {
    int N, K;
    cin >> N >> K;
    int in[K][N];
    for (int i = 0; i < K; ++i) {
        int s;
        read(in[i], &s);
    }
    for (int i = 0; i < K; ++i) {
        for (int j = N - 2; j >= 0; --j) {
            int x = in[i][j];
            int s = -1, v = 1000;
            for (int k = j + 1; k < N; k++) {
                if (in[i][k] > x && in[i][k] < v) {
                    s = k;
                    v = in[i][k];
                }
            }
            if (s != -1) {
                int c = in[i][s];
                in[i][s] = x;
                in[i][j] = c;
                sort(in[i] + j + 1, in[i] + N);
                break;
            }
        }
    }
    for (int i = 0; i < K; i++) {
        for (int k = 0; k < N; k++)
            cout << in[i][k] << " ";
        cout << endl;
    }
    return 0;
}

正如你可以从代码中说的那样,我是一个完整的新手。 我在测试时给出了正确的答案,但法官说它给出了错误的答案。

帮助?

谢谢!

0 个答案:

没有答案