Pagini recente » Cod sursa (job #3316081) | Cod sursa (job #641642) | Cod sursa (job #158388) | Cod sursa (job #3334590) | Cod sursa (job #3328198)
#include <iostream>
#include <fstream>
using namespace std;
/**Se citesc două numere naturale nenule n și k. Să se afişeze, în ordine lexicografică, submulțimile de câte k elemente ale mulţimii {1,2,..,n}.*/
ifstream f("combinari.in");
ofstream g("combinari.out");
///var 0
int n, m, x[16];
/**bool valid(int k)
{
return (x[k - 1] < x[k]); ///(*)
}
void prelsol()
{
for(int i = 1; i <= m; i++)
g << x[i] << ' ';
g << '\n';
}
void bt(int k)
{
if(k <= m)
for(int i = 1; i <= n; i++)
{
x[k] = i;
if(valid(k))
bt(k + 1);
}
else
prelsol();
}*/
///var 1!!!!
/**void prelsol()
{
for(int i = 1; i <= m; i++)
g << x[i] << ' ';
g << '\n';
}
void bt(int k)
{
if(k <= m)
for(int i = x[k - 1] + 1; i <= n; i++) ///(*)
{
x[k] = i;
bt(k + 1);
}
else
prelsol();
}*/
///var2
void prelsol()
{
for(int i = 1; i <= m; i++)
g << x[i] << ' ';
g << '\n';
}
/**
x[k-1]+1= cea mai mica val care poate fi pusa pe poz k
n-m+k= cea mai mare val care poate fi pusa pe poz k */
void bt(int k)
{
if(k <= m)
for(int i = x[k - 1] + 1; i <= n - m + k; i++)
{
x[k] = i;
bt(k + 1);
}
else
prelsol();
}
int main()
{
f >> n >> m;
///x[0]=0;///artificiu pentru (*) cand k=1
bt(1);
f.close();
g.close();
return 0;
}