Submission

Status:

--------------------

Subtask/Task Score:

0/100

Score: 0

User: chokun

Problemset: Abacus

Language: cpp

Time: 0.004 second

Submitted On: 2026-10-07 11:56:34

#include <bits/stdc++.h>
using namespace std;

int main() {
    long long input_number;
    cin >> input_number;

    // 1. แยกตัวเลขออกเป็น 8 หลัก (เติม 0 ข้างหน้าให้ครบ 8 หลัก)
    int d[8] = {0};
    for (int i = 7; i >= 0; --i) {
        d[i] = input_number % 10;
        input_number /= 10;
    }

    // 2. สร้างตารางขนาด 10 แถว 8 คอลัมน์ (ค่าเริ่มต้นเป็นช่องว่าง ' ')
    char grid[10][8];
    for (int i = 0; i < 10; ++i) {
        for (int j = 0; j < 8; ++j) {
            grid[i][j] = ' ';
        }
    }

    // 3. คำนวณตำแหน่งเม็ดลูกคิดในแต่ละหลัก (j คือหลักจาก 0 ถึง 7)
    for (int j = 0; j < 8; ++j) {
        
        // --- ส่วนบน (แถว index 0 ถึง 2) ---
        // มีลูกคิด 2 เม็ด ถ้าค่าน้อยกว่า 5 จะอยู่แถว 0,1 แต่ถ้าตั้งแต่ 5 ขึ้นไป เม็ดนึงจะปัดลงมาแถว 2
        if (d[j] < 5) {
            grid[0][j] = '*';
            grid[1][j] = '*';
            grid[2][j] = ' ';
        } else {
            grid[0][j] = '*';
            grid[1][j] = ' ';
            grid[2][j] = '*';
        }

        // --- ส่วนล่าง (แถว index 4 ถึง 9) ---
        // แถวที่ 3 คือแกนกลาง ดังนั้นส่วนล่างจะเริ่มที่แถว 4 ถึง 9 (มีพื้นที่ 6 แถว สำหรับลูกคิด 5 เม็ด)
        int active_lower = d[j] % 5; // จำนวนเม็ดที่ถูกปัดขึ้นไปติดแกนกลาง
        
        // วาดเม็ดที่ปัดขึ้น (ไล่จากแถว 4 ลงไป)
        for (int r = 0; r < active_lower; ++r) {
            grid[4 + r][j] = '*';
        }
        
        // เว้นช่องว่างไว้ 1 ช่อง (ช่องว่างหน้าต่างเคลื่อนที่)
        grid[4 + active_lower][j] = ' ';
        
        // วาดเม็ดที่เหลือค้างอยู่ด้านล่าง (ไล่จากช่องถัดจากช่องว่างไปจนถึงแถว 9)
        for (int r = active_lower + 1; r <= 5; ++r) {
            grid[4 + r][j] = '*';
        }
    }

    // 4. แสดงผลลัพธ์ตามฟอร์แมตที่โจทย์กำหนด
    for (int i = 0; i < 10; ++i) {
        // เมื่อถึงแถว index 3 ให้พิมพ์แกนกลางคั่น
        if (i == 3) {
            cout << "-----------------" << endl;
        }
        
        // พิมพ์ลูกคิดแต่ละหลักห่างกัน 1 ช่องว่าง (ความยาวรวม 15 ตัวอักษรพอดี)
        for (int j = 0; j < 8; ++j) {
            cout << grid[i][j];
            if (j < 7) {
                cout << " ";
            }
        }
        cout << endl;
    }
}