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!

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

       }

1 comment: