Cod sursa(job #1496414)

Utilizator Balescu_OvidiuBalescu Ovidiu-Gheorghe Balescu_Ovidiu Data 4 octombrie 2015 21:59:51
Problema Combinari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>

unsigned n,k,*c;
FILE*g=fopen("combinari.out","w");

void afisare(){
	for(unsigned i=0;i<k;i++)
		fprintf(g,"%u ",c[i]);
	fprintf(g,"\n");
}
void combinari(unsigned q){
	for(unsigned i=q;i>=0;i--){
		if(i==k-1)
			while(c[i]<n){
				c[i]++;
				afisare();
			}
		else{
			if(c[i]+1<c[i+1]){
				c[i]++;
				for(unsigned j=i+1;j<k;j++)
					c[j]=c[j-1]+1;
				i=q;
				afisare();
				while(c[i]<n){
					c[i]++;
					afisare();
				}
			}
		}
		if(!i)
			break;
	}
}

int main(){
    FILE*f=fopen("combinari.in","r");
    fscanf(f,"%u %u",&n,&k);
    fclose(f);
	c=(unsigned*)malloc(k*sizeof(unsigned));
	if(k&&n){
		for(unsigned i=0;i<k;i++)
				c[i]=i+1;
		afisare();
		combinari(k-1);
	}
	fclose(g);
	return 0;
}

/*void combinari(){
	for(unsigned i=0;i<k-1;i++){
		while(c[k-i-1]<=n&&c[k-i-1]<c[k-i]){
			c[k-i-1]++;
			for(unsigned j=0;j<k;j++)
				fprintf(g,"%u ",c[j]);
			printf("\n");
			if(k-i<k){
				combinari();
				for(unsigned j=k-i-1;j<k;j++)
					c[j]=c[j-1]+1;
			}
		}
	}
}*/