Pagini recente » Cod sursa (job #1231492) | Cod sursa (job #1660814) | Cod sursa (job #810631) | Cod sursa (job #176253) | Cod sursa (job #610933)
Cod sursa(job #610933)
#include<cstdio>
#include <vector>
using namespace std;
class choose {
int elements;
vector <int> state;
public:
choose();
choose(const choose &c);
choose(int elm, int choose);
bool hasNext() const;
vector <int> next();
vector <int> getState() const;
~choose();
};
choose::choose() {
elements = 0;
}
choose::choose(const choose &c) {
elements = c.elements;
state = c.state;
}
choose::choose(int elm, int choose) {
elements = elm;
for(int i = 1; i <= choose; ++i)
state.push_back(i);
}
bool choose::hasNext() const {
if(state.empty()) {
return false;
}
for(unsigned i = 0; i + 1 < state.size(); ++i)
if(state[i] + 1 != state[i+1]) {
return true;
}
if(state.back() < elements) {
return true;
}
return false;
}
vector <int> choose::next() {
for(int i = state.size() - 1; i >= 0; --i)
if(state[i] != elements - ((int)state.size() - i) + 1) {
++state[i];
for(unsigned j = i + 1; j < state.size(); ++j) {
state[j] = state[i] + (j-i);
}
break;
}
return state;
}
vector <int> choose::getState() const {
return state;
}
choose::~choose() {
}
void writeVector(vector <int> v) {
for(unsigned i = 0; i < v.size(); ++i)
printf("%d ", v[i]);
printf("\n");
}
int main() {
freopen("combinari.in", "r", stdin);
freopen("combinari.out", "w", stdout);
int n, k;
scanf("%d %d\n", &n, &k);
choose ch = choose(n, k);
while(true) {
writeVector(ch.getState());
if(ch.hasNext())
ch.next();
else break;
}
fclose(stdin);
fclose(stdout);
return 0;
}