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!
Showing posts with label Lập trình Java cơ bản. Show all posts
Showing posts with label Lập trình Java cơ bản. Show all posts

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);
              }
       }

}

Tuesday, January 26, 2016

On 8:31 PM by MATH CHANNEL in    1 comment
Chương trình Liệt kê tất cả các xâu nhị phân độ dài 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 int convertStringBinary2DecimalNumber(String binary) {
              int n = 0;
              for (int i = 0; i < binary.length(); i++) {
                     if (binary.charAt(i) == '1') {
                           n = n + 1 * (int) Math.pow(2, binary.length() - i - 1);
                     } else if (binary.charAt(i) == '0') {
                           n = n + 0 * (int) Math.pow(2, binary.length() - i - 1);
                     }
              }
              return n;

       }

       public static void inDayNhiPhanDoDai_n(int n) {
              String nhiphan_min = "", nhiphan_max = "";
              for (int i = 0; i < n; i++) {
                     nhiphan_min += "0";
                     nhiphan_max += "1";
              }
              int a = convertStringBinary2DecimalNumber(nhiphan_min);
              int b = convertStringBinary2DecimalNumber(nhiphan_max);
              int dodai_b = Integer.toBinaryString(b).length();
              for (int i = a; i <= b; i++) {
                     String str = Integer.toBinaryString(i);
                     if (str.length() < dodai_b) {
                           while (str.length() < dodai_b) {
                                  str = "0" + str;
                           }
                           System.out.println(str);
                     } else {
                           System.out.println(str);
                     }
              }
       }

       public static void main(String[] args) {
              System.out.println("Chương trình liệt kê tất cả các xâu nhị phân độ dài n.");
              System.out.println("Nhập độ dài n:");
              int n = nhapSoTN();
              inDayNhiPhanDoDai_n(n);
       }

}

Hoặc dùng method

       public static void inDayNhiPhanDoDai_n(int n) {
              int[] array = new int[n];
              int tich;
              do {
                     tich = 1;
                     System.out.println("");
                     for (int j = 0; j < n; j++) {
                           System.out.print(array[j]);
                           tich *= array[j];
                     }
                     int i = n - 1;
                     do {
                           if (array[i] == 0) {
                                  array[i] = 1;
                                  for (int j = n - 1; j > i; j--) {
                                         array[j] = 0;
                                  }
                                  break;
                           } else
                                  i--;
                     } while (i >= 0);
              } while (tich != 1); 

       }

Sunday, January 10, 2016

On 2:56 AM by MATH CHANNEL in    1 comment
Một số được gọi là số thuận nghịch độc nếu ta đọc từ trái sang phải hay từ phải sang trái số đó ta vẫn nhận được một số giống nhau. Hãy liệt kê tất cả các số thuận nghịch độc có sáu chữ số (ví dụ số: 558855)

public class Main {

       public static boolean ktraSoThuanNghich(int n) {
              StringBuilder xau = new StringBuilder();
              String str = "" + n;
              xau.append(str);
              String check = "" + xau.reverse();
              if (str.equals(check))
                     return true;
              else
                     return false;
       }

       public static void main(String[] args) {
              int n, count = 0;
              for (n = 100000; n <= 999999; n++) {
                     if (ktraSoThuanNghich(n)) {
                            System.out.println(n);
                           count++;
                     }
              }
              System.out.println("Có " + count + " số thuận nghịch có 6 chữ số.");
       }

}