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