# L1-6 find the set of integers that meet the given conditions

Posted by TFD3 on Thu, 02 Apr 2020 01:07:38 +0200

Title Description

Given A positive integer A of no more than 6, consider four consecutive numbers starting with A. Please output 3 digits of all non repeating numbers composed of them.

input

Enter A on one line.

output

Output 3 digits that meet the conditions, from small to large, 6 integers per line. Integers are separated by spaces, but no extra spaces are allowed at the end of the line.

sample input

`2`

sample output

```234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543```

thinking

Two ideas
1. Use next ﹣ permutation enumeration to store in set and then output
2. similar to dfs

Idea one code

```#include <bits/stdc++.h>
using namespace std;

set<int> st;
int a[3];

int main(){
int n;
cin>>n;
a[0] = n;
a[1] = n+1;
a[2] = n+2;
do{
st.insert(a[0]*100+a[1]*10+a[2]);
}while(next_permutation(a, a+3));

a[0] = n;
a[1] = n+1;
a[2] = n+3;
do{
st.insert(a[0]*100+a[1]*10+a[2]);
}while(next_permutation(a, a+3));

a[0] = n;
a[1] = n+2;
a[2] = n+3;
do{
st.insert(a[0]*100+a[1]*10+a[2]);
}while(next_permutation(a, a+3));

a[0] = n+1;
a[1] = n+2;
a[2] = n+3;
do{
st.insert(a[0]*100+a[1]*10+a[2]);
}while(next_permutation(a, a+3));

int cnt = 0;
for(set<int>::iterator it=st.begin(); it!=st.end(); it++){
if(cnt){
cout<<' ';
}
cout<<*it;
if(++cnt%6 == 0){
cnt = 0;
cout<<endl;
}

}

return 0;
} ```

Idea 2 code

```#include <bits/stdc++.h>
using namespace std;

int book[10];

int main(){
int a;
int cnt = 0;
cin>>a;
int i, j, k;
for(i=a; i<a+4; i++){
book[i] = 1;
for(j=a; j<a+4; j++){
if(book[j] == 0){
book[j] = 1;
for(k=a; k<a+4; k++){
if(book[k] == 0){
book[k] = 1;
if(cnt){
cout<<' ';
}
cout<<i<<j<<k;
if(++cnt==6){
cnt = 0;
cout<<endl;
}
book[k] = 0;
}
}
book[j] = 0;
}
}
book[i] = 0;
}

return 0;
} ```