Cod sursa(job #2336333)

Utilizator AxellApostolescu Alexandru Axell Data 5 februarie 2019 01:14:36
Problema Submultimi Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>
#include <stdlib.h>

int next_perm(int *v, int lenght, int n, FILE* out) {
	int i;
	if (v[0] == n) {
		fprintf(out, "%d \n", n);
		return 0;
	}
	for (i = 0 ; i < lenght ; ++i) {
		fprintf(out, "%d ", v[i]);
	}
	fprintf(out, "\n");
	if (v[lenght - 1] < n) {
		v[lenght] = v[lenght - 1] + 1;
		return next_perm(v, lenght + 1, n, out);
	} else {
		v[lenght - 2]++;
		return next_perm(v, lenght - 1, n, out);
	}
}

int main() {
	FILE *in, *out;
	if (((in = fopen("submultimi.in", "rt")) == NULL)) {
		printf("Nu am putut deschide fisierul de input!");
		return -1;
	}
	if (((out = fopen("submultimi.out", "wt")) == NULL)) {
		printf("Nu am putut deschide fisierul de output!");
		return -2;
	}
	int n;
	fscanf(in, "%d", &n);
	int *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;
	}
	next_perm(v, 1, n, out);
	// Freeing the memory
	free(v);
	fclose(in);
	fclose(out);
	return 0;
}