Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

โปรแกรม Java ตรวจสอบว่าสามารถสร้างเลขหาร 3 ลงตัวจาก Digits ใน Array ได้หรือไม่

หลักการ: Divisibility by 3

เลขหาร 3 ลงตัว ⇔ ผลรวมของหลักเลขหาร 3 ลงตัว

ไม่สนใจลำดับตัวเลข เพราะการจัดเรียงใหม่ไม่เปลี่ยนผลรวมหลักเลข

ตัวอย่างโค้ด


public class Demo {
    public static boolean canFormDivisibleBy3(int[] digits) {
        int sum = 0;
        for (int d : digits) {
            // ถ้าแต่ละ element เป็น digit เดียว (0-9) ใช้ได้เลย
            // ถ้าเป็น multi-digit numbers ต้องแยกหลักก่อน
            sum += d;
        }
        return sum % 3 == 0;
    }
    
    // ถ้า array มีตัวเลขหลายหลัก ต้องแยก digits ก่อน
    public static boolean canFormDivisibleBy3FromNumbers(int[] numbers) {
        int sum = 0;
        for (int num : numbers) {
            int n = Math.abs(num); // handle negative
            if (n == 0) { sum += 0; continue; }
            while (n > 0) {
                sum += n % 10;
                n /= 10;
            }
        }
        return sum % 3 == 0;
    }
    
    public static void main(String[] args) {
        int[] arr1 = {66, 90, 87, 33, 123}; // digits sum = 6+6+9+0+8+7+3+3+1+2+3 = 48 → divisible by 3
        System.out.println("Array 1: " + Arrays.toString(arr1) + " → " + canFormDivisibleBy3FromNumbers(arr1));
        
        int[] arr2 = {1, 2, 4}; // sum = 7 → not divisible
        System.out.println("Array 2: " + Arrays.toString(arr2) + " → " + canFormDivisibleBy3FromNumbers(arr2));
    }
}

ผลลัพธ์

Array 1: [66, 90, 87, 33, 123] → true
Array 2: [1, 2, 4] → false

Complexity

  • Time: O(total digits) - ต้องอ่านทุกหลักเลข
  • Space: O(1)

ขยาย: สร้างเลขที่หาร 3 ลงตัวจริงๆ


// เรียง digits ใหญ่ไปเล็ก → ใหญ่ที่สุด
// เรียง digits เล็กไปใหญ่ → เล็กที่สุด (leading zero ไม่ได้)
// ต้องมี 0 อย่างน้อย 1 ตัวสำหรับเลขหลายหลัก