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