0
已解决
张恩泽
高级天翼
高级天翼
3571 数字序列I
经验值:800 时间限制:1000毫秒
题目描述 Description
现在给定一个数字N(1<=N<=9),小H已经得到了序列A(序列A是由1到N一个排列),小H现在想知道比A序列字典序小一个的相同数字排列出的序列B是什么。
输入描述 Input Description
第一行一个整数N
第二行N个用空格隔开的整数,表示原定序列
输出描述 Output Description
前一个序列
样例输入 Sample Input
3 1 3 2
样例输出 Sample Output
1 2 3
数据范围及提示 Data Size & Hint
若当前排列已经是第一个,则输出’ERROR’(引号不输出)
//CODE
//#pragma GCC optimize(3)
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int a[100];
int ans[100], t1;
int s[100];
bool used[10];
bool flag = true;
void dfs(int t) {
if (t == n + 1) {
for (int i = 1 ;i <= n; i ++) {
if (ans[i] != a[i]) {
flag = false;
}
s[i] = ans[i];
}
return ;
}
if (flag == true) {
for (int i = 1; i <= n; i ++) {
cout << s[i] << ' ';
}
}
for (int i = 1; i <= n; i ++) {
if (!used[i]) {
ans[t] = i;
used[i] = true;
dfs(t + 1);
used[i] = false;
}
}
}
int main() {
// freopen ("题目名.in", "r", stdin);
// freopen ("题目名.out", "w", stdout);
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
dfs(1);
// fclose (stdin);
// fclose (stdout);
return 0;//好习惯!
}
张恩泽在2021-05-19 22:00:29追加了内容
改了一丢丢
//CODE
//#pragma GCC optimize(3)
//#include <bitsdc++.h>
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int a[100];
int ans[100], t1;
int s[100];
bool used[10];
bool flag = true;
void dfs(int t) {
if (t == n + 1) {
if (flag == true) {
for (int i = 1; i <= n; i ++) {
cout << s[i] << ' ';
}
}
for (int i = 1 ;i <= n; i ++) {
if (ans[i] != a[i]) {
flag = false;
}
s[i] = ans[i];
}
return ;
}
for (int i = 1; i <= n; i ++) {
if (!used[i]) {
ans[t] = i;
used[i] = true;
dfs(t + 1);
used[i] = false;
}
}
}
int main() {
// freopen ("题目名.in", "r", stdin);
// freopen ("题目名.out", "w", stdout);
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
dfs(1);
// fclose (stdin);
// fclose (stdout);
return 0;//好习惯!
}
张恩泽在2021-05-20 12:23:35追加了内容
//CODE
//#pragma GCC optimize(3)
//#include <bitsdc++.h>
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int a[100];
int ans[100], t1;
int s[100];
bool used[10];
bool flag = true;
bool match() {
for (int i = 1; i <= n; i ++) {
if (a[i] != s[i]) {
return false;
}
}
return true;
}
void dfs(int t) {
if (t == n + 1) {
if (match() == true) {
for (int i = 2; i <= n; i ++) {
if (a[i] - 1 != a[i - 1]) {
flag = true;
}
}
if (!flag) {
cout << "ERROR";
}
for (int i = 1; i <= n; i ++) {
cout << s[i] << ' ';
}
return ;
}
for (int i = 1; i <= n; i ++) {
s[i] = a[i];
}
return ;
}
for (int i = 1; i <= n; i ++) {
if (!used[i]) {
ans[t] = i;
used[i] = true;
dfs(t + 1);
used[i] = false;
}
}
}
int main() {
// freopen ("题目名.in", "r", stdin);
// freopen ("题目名.out", "w", stdout);
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
dfs(1);
// fclose (stdin);
// fclose (stdout);
return 0;//好习惯!
}
张恩泽在2021-05-20 12:23:42追加了内容
//CODE
//#pragma GCC optimize(3)
//#include <bitsdc++.h>
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int a[100];
int ans[100], t1;
int s[100];
bool used[10];
bool flag = true;
bool match() {
for (int i = 1; i <= n; i ++) {
if (a[i] != s[i]) {
return false;
}
}
return true;
}
void dfs(int t) {
if (t == n + 1) {
if (match() == true) {
for (int i = 2; i <= n; i ++) {
if (a[i] - 1 != a[i - 1]) {
flag = true;
}
}
if (!flag) {
cout << "ERROR";
}
for (int i = 1; i <= n; i ++) {
cout << s[i] << ' ';
}
return ;
}
for (int i = 1; i <= n; i ++) {
s[i] = a[i];
}
return ;
}
for (int i = 1; i <= n; i ++) {
if (!used[i]) {
ans[t] = i;
used[i] = true;
dfs(t + 1);
used[i] = false;
}
}
}
int main() {
// freopen ("题目名.in", "r", stdin);
// freopen ("题目名.out", "w", stdout);
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
dfs(1);
// fclose (stdin);
// fclose (stdout);
return 0;//好习惯!
}