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:45:16

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

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

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

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

    // คำนวณตำแหน่งลูกคิดในส่วนบน (Upper Deck: แถวที่ 0-2)
    for (int j = 0; j < 8; ++j) {
        grid[0][j] = '*'; // แถวบนสุดมีลูกคิดเสมอ
        if (d[j] < 5) {
            grid[1][j] = '*'; // ปัดขึ้น (อยู่แถวที่ 1)
        } else {
            grid[2][j] = '*'; // ปัดลง (อยู่แถวที่ 2)
        }
    }

    // คำนวณตำแหน่งลูกคิดในส่วนล่าง (Lower Deck: แถวที่ 3-9)
    for (int j = 0; j < 8; ++j) {
        int u = d[j] % 5; // จำนวนเม็ดที่ปัดขึ้นหาแกนกลาง
        
        // เม็ดที่ปัดขึ้นติดแกนกลาง
        for (int k = 0; k < u; ++k) {
            grid[3 + k][j] = '*';
        }
        
        // เม็ดที่เหลือจะอยู่ด้านล่างสุด (เว้นระยะช่องว่างไว้เป็นแกน)
        for (int k = 0; k < (5 - u); ++k) {
            grid[9 - k][j] = '*';
        }
    }

    // แสดงผลลัพธ์ตามฟอร์แมตที่โจทย์กำหนด
    for (int i = 0; i < 10; ++i) {
        // พิมพ์แกนกลางคั่นระหว่างแถวที่ 2 และแถวที่ 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;
    }
}