Cod sursa(job #1361828)

Utilizator vlad.maneaVlad Manea vlad.manea Data 26 februarie 2015 00:02:08
Problema Combinari Scor 100
Compilator java Status done
Runda Arhiva educationala Marime 1.73 kb
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class CombinationGenerator {
	private int size;
	private int min;
	List<List<Integer>> solutions;
	List<Integer> solution;

	public CombinationGenerator(int size, int min) {
		this.size = size;
		this.min = min;
	}

	public List<List<Integer>> generateCombinations() {
		solutions = new ArrayList<List<Integer>>();
		solution = new ArrayList<Integer>();
		generateCombination(0);
		return solutions;
	}

	private void generateCombination(int k) {
		if (k >= min) {
			solutions.add(new ArrayList<Integer>(solution));
			return;
		}
		
		int minI = k > 0 ? 1 + solution.get(k - 1) : 0; 

		for (int i = minI; i < size; ++i) {
			solution.add(i);
			generateCombination(k + 1);
			solution.remove(solution.size() - 1);
		}
	}
}

public class Main {
	public static void main(String[] args) throws IOException {
		InputStream inputStream = new FileInputStream("combinari.in");
		Scanner scanner = new Scanner(inputStream);

		OutputStream outputStream = new FileOutputStream("combinari.out");
		PrintWriter writer = new PrintWriter(outputStream);

		int N = scanner.nextInt();
		int K = scanner.nextInt();
		List<List<Integer>> solutions = new CombinationGenerator(N, K).generateCombinations();

		for (List<Integer> solution : solutions) {
			for (int i : solution) {
				writer.print((1 + i) + " ");
			}

			writer.println();
		}

		writer.flush();

		writer.close();
		outputStream.close();

		scanner.close();
		inputStream.close();
	}
}