问题是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;
}
正如你可以从代码中说的那样,我是一个完整的新手。 我在测试时给出了正确的答案,但法官说它给出了错误的答案。
帮助?
谢谢!