请用c语言写一个第一行输入n个整数(n<=9)第二行输入1~n的的原定排列,输出给定排列的前一个排列,若已为第一个排列则输出ERROR的代码 例:输入:3 213 输出:132
时间: 2024-10-10 20:14:37 浏览: 10
在C语言中,我们可以使用数组和循环来实现这个功能。但是请注意,因为题目要求找到前一个排列,对于有限的输入(最多9个数),我们可以通过简单的数组遍历和条件判断来完成。下面是一个简化的示例代码:
```c
#include <stdio.h>
#define N 9
int main() {
int n, arr[N], temp[N];
// 输入n和n个整数
printf("请输入数字的数量(n <= 9): ");
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
printf("请输入第%d个数字: ", i + 1);
scanf("%d", &arr[i]);
}
// 检查是否是第一个排列
if (n == 1) {
printf("ERROR\n");
} else {
// 从第二个元素开始寻找前一个排列
for (int i = 1; i < n; ++i) {
// 找到当前最小的元素
int min_idx = i;
for (int j = i + 1; j < n; ++j) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
// 将最小元素移到最左边,然后将其他元素回溯
temp[i] = arr[min_idx];
for (int j = n - 1; j > i; --j) {
arr[j] = arr[j - 1];
}
arr[i] = temp[i];
// 输出排列
for (int k = 0; k < n; ++k) {
printf("%d ", arr[k]);
}
printf("\n");
}
}
return 0;
}
```