Cod sursa(job #2339534)

Utilizator AxellApostolescu Alexandru Axell Data 9 februarie 2019 01:23:13
Problema Combinari Scor 10
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#include <stdlib.h>

void print_combination(int *v, int k, FILE* out) {
	for (int i = 0 ; i < k ; ++i) {
		fprintf(out, "%d ", v[i]);
	}
	fprintf(out, "\n");
}

void next_permutation(int n, int k, int *v, FILE* out) {
	int i;
	for (i = 0 ; i <= k - 1 ; ++i) {
		while (v[k - 1 - i] != n - i) {
			v[k - 1 - i]++;
			print_combination(v, k, out);
		}
	}
}

int main() {
	FILE *in, *out;
	if (((in = fopen("combinari.in", "rt")) == NULL)) {
		printf("Nu am putut deschide fisierul de input!");
		return -1;
	}
	if (((out = fopen("combinari.out", "wt")) == NULL)) {
		printf("Nu am putut deschide fisierul de output!");
		return -2;
	}
	int n, k, *v;
	fscanf(in, "%d %d", &n, &k);
	v = malloc(n * sizeof(int));
	if (v == NULL) {
		printf("Nu am putut aloca memorie\n");
		return -3;
	}
	for (int i = 0 ; i < n ; ++i) {
		v[i] = i + 1;
	}
	print_combination(v, k, out);
	next_permutation(n, k, v, out);
	// Freeing the memory
	free(v);
	fclose(in);
	fclose(out);
	return 0;
}