Lập trình Java - Tìm số thuận nghịch trong

Đề bài: Viết chương trình tìm các số thuận nghịch có sáu chữ số từ 100000 đến 999999. Một số được gọi là số thuận nghịch nếu nó bằng số đảo ngược, tức là 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. Ví dụ 123321 là một số thuận nghịch.

123321 --> True

123451 --> False


Lời giải

Cách 1: Duyệt các số từ 100000 đến 999999, rồi phân tách số hiện tại thành các chữ số đơn lẻ để kiểm tra tính thuận nghịch.

Mã nguồn chương trình:


import java.util.ArrayList;
import java.util.List;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author ADMIN
 */
public class Bai08 {

    /**
     * @param args the command line arguments
     */
     public static int DEC_10 = 10;
    public static boolean isThuanNghich(int n) {
        List<Integer> listNumbers = new ArrayList<>();
        // phân tích số n thành các chữ số và lưu vào listNumbers
        do {
            listNumbers.add(n % DEC_10);
            n = n / DEC_10;
        } while (n > 0);
        // kiểm tra tính thuận nghịch
        int size = listNumbers.size();
        for (int i = 0; i < (size/2); i++) {
            if (listNumbers.get(i) != listNumbers.get(size - i - 1)) {
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
        // TODO code application logic here
        int count = 0;
        // in ra màn hình các số thuận nghịch có 6 chữ số
        for (int i = 100000; i < 1000000; i++) {
            if (isThuanNghich(i)) {
                System.out.println(i);
                count++;
            }
        }
        System.out.println("Tong so thuan nghich co 6 chu so: "  + count);
    }
    
}

Kết quả:

100001
101101
102201
...
997799
998899
999999
Tổng các số thuận nghịch có 6 chữ số: 900

Cách 2: sử dụng thuật toán + StringBuilder trong java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author ADMIN
 */
public class Bai08_1 {
    public static final int[] DEC_ARR_1_9 = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    public static final int[] DEC_ARR_10 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
     
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int count = 0;
        StringBuilder sb;
        // in ra màn hình các số thuận nghịch có 6 chữ số
        for (int a : DEC_ARR_1_9) {
            for (int b : DEC_ARR_10) {
                for (int c : DEC_ARR_10) {
                    sb = new StringBuilder();
                    sb.append(a).append(b).append(c).append(c).append(b).append(a);
                    System.out.println(sb.toString());
                    count++;
                }
            }
        }
        System.out.println("Tong cac so thuan nghich 6 chu so: "  + count);
    }
    
}

Kết quả:

100001
101101
102201
...
997799
998899
999999
Tổng các số thuận nghịch có 6 chữ số: 900

Cách 3: Chuyển đổi n thành chuỗi String rồi kiểm tra tính thuận nghịch.

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author ADMIN
 */
public class Bai08_2 {

    /**
     * @param args the command line arguments
     */
    public static boolean isThuanNghich(int n) {
        // chuyển đổi số n thành một chuỗi String
        String numberStr = String.valueOf(n);
        // kiểm tra tính thuận nghịch
        int size = numberStr.length();
        for (int i = 0; i < (size/2); i++) {
            if (numberStr.charAt(i) != numberStr.charAt(size - i - 1)) {
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
        // TODO code application logic here
        int count = 0;
        // in ra màn hình các số thuận nghịch có 6 chữ số
        for (int i = 100000; i < 1000000; i++) {
            if (isThuanNghich(i)) {
                System.out.println(i);
                count++;
            }
        }
        System.out.println("Tong cac so thuan nghich co 6 chu so: "+ count);
    }
    
}

Kết quả:

100001
101101
102201
...
997799
998899
999999
Tổng các số thuận nghịch có 6 chữ số: 900