Blog TOÁN-TIN của Thầy CHÂU HỮU SƠN

Tui là Giáo viên Chuyên Toán Trung học. Hãy xem thêm:
Vườn Toán học
Cảm ơn các bạn đã ghé thăm blog!

Thursday, January 28, 2016

On 8:21 PM by MATH CHANNEL in    1 comment
Chương trình liệt kê tất cả các dãy con k phần tử của 1, 2,..., n (k ≤ n)

import java.util.Scanner;

public class Main {

       public static int nhapSoTN() {
              Scanner input = new Scanner(System.in);
              boolean check = false;
              int n = 0;
              while (!check) {
                     try {
                           n = Integer.parseInt(input.nextLine());
                           if (n < 0) {
                                  System.out.println("Bạn phải nhập số tự nhiên! Hãy nhập lại.");
                                  continue;
                           }
                           check = true;
                     } catch (Exception e) {
                           System.out.println("Bạn phải nhập số tự nhiên! Hãy nhập lại.");
                     }
              }
              return (n);
       }

       public static void result(int a[], int k) {
              int i;
              System.out.println();
              for (i = 1; i <= k; i++) {
                     System.out.print(" " + a[i]);
              }
       }
      
       public static void try_backTrack(int a[], int n, int k, int i) {
              int j;
              for (j = a[i - 1] + 1; j <= (n - k + i); j++) {
                     a[i] = j;
                     if (i == k)
                           result(a, k);
                     else
                           try_backTrack(a, n, k, i + 1);
              }
       }

       public static void main(String[] args) {
              System.out.println("Chương trình liệt kê tất cả các dãy con k phần tử của 1, 2,… n");
              System.out.print("Nhập n: ");
              int n = nhapSoTN();
              int[] array = new int[n + 1];
              int k;
              System.out.println("Liệt kê tất cả các tập con k phần tử của 1,2,..," + n + " : ");
              for (k = 1; k <= n; k++) {
                     System.out.print("\n Tập con " + k + " phần tử: ");
                     try_backTrack(array, n, k, 1);
              }
       }

}

1 comment: