#3689 2gen
Cerința
Se n și m numere naturale. Afișați în ordine lexicografică toate șirurile de lungime m care conțin numere de la 1 la n și fiecare valoare apare de maxim două ori.
Date de intrare
Fișierul de intrare 2gen.in conține pe prima linie numerele n și m separate prin spațiu.
Date de ieșire
Fișierul de ieșire 2gen.out va conține câte o soluție pe linie. Numerele de pe aceeași linie se separă prin spații.
Restricții și precizări
1 ≤ n ≤ 6
1 ≤ m ≤ 6
Exemplu
2gen.in
4 3
2gen.out
1 1 2
1 1 3
1 1 4
1 2 1
1 2 2
1 2 3
1 2 4
1 3 1
1 3 2
1 3 3
1 3 4
1 4 1
1 4 2
1 4 3
1 4 4
2 1 1
2 1 2
2 1 3
2 1 4
2 2 1
2 2 3
2 2 4
2 3 1
2 3 2
2 3 3
2 3 4
2 4 1
2 4 2
2 4 3
2 4 4
3 1 1
3 1 2
3 1 3
3 1 4
3 2 1
3 2 2
3 2 3
3 2 4
3 3 1
3 3 2
3 3 4
3 4 1
3 4 2
3 4 3
3 4 4
4 1 1
4 1 2
4 1 3
4 1 4
4 2 1
4 2 2
4 2 3
4 2 4
4 3 1
4 3 2
4 3 3
4 3 4
4 4 1
4 4 2
4 4 3
Răspunsuri la întrebare
Răspuns de
1
Răspuns:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("2gen.in");
ofstream fout("2gen.out");
int n,m,sol[20];
int succesor(int k)
{
if (sol[k]<n)
{
sol[k]++;
return 1;}
else return 0;
}
int valid(int k)
{int i,nr=0;
for (i=1;i<k;i++)
if (sol[k]==sol[i]) nr++;
return (nr<=1);
}
void back(int k)
{
if(k==m+1)
{for(int i=1;i<=m;i++) fout<<sol[i]<<" ";
fout<<endl;}
else
{
sol[k]=0;
while (succesor(k))
if (valid(k)) back(k+1);
}
}
int main()
{
fin >>n>>m;
back(1);
return 0;
}
Explicație:
Alte întrebări interesante
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Geografie,
8 ani în urmă
Engleza,
9 ani în urmă
Engleza,
9 ani în urmă