在编程中,要生成1到n的顺序排列,可以使用多种方法。以下是一些常见的方法:
使用循环
```c
include
void print_permutation(int n) {
for (int i = 1; i <= n; i++) {
printf("%d ", i);
}
printf("\n");
}
int main() {
int n;
printf("Enter a number: ");
scanf("%d", &n);
print_permutation(n);
return 0;
}
```
使用递归
```c
include
void print_permutation(int n, int *A, int cur) {
if (cur == n) {
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
printf("\n");
} else {
for (int i = 1; i <= n; i++) {
if (A[cur] == 0) {
A[cur] = i;
print_permutation(n, A, cur + 1);
A[cur] = 0;
}
}
}
}
int main() {
int n;
printf("Enter a number: ");
scanf("%d", &n);
int A[n];
for (int i = 0; i < n; i++) {
A[i] = 0;
}
print_permutation(n, A, 0);
return 0;
}
```
使用字典序生成
```c
include
void print_permutation(int n) {
int A[n];
for (int i = 0; i < n; i++) {
A[i] = i + 1;
}
for (int i = 0; i < n; i++) {
int j = i;
while (A[j] != 0) {
int k = j + 1;
while (k < n && A[k] < A[j]) {
k++;
}
if (k < n) {
int temp = A[j];
A[j] = A[k];
A[k] = temp;
}
j = i;
}
}
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
printf("\n");
}
int main() {
int n;
printf("Enter a number: ");
scanf("%d", &n);
print_permutation(n);
return 0;
}
```