● Codeforces Round #211 (Div. 2) - A. Soroban
در کشور ژاپن، چرتکه ای توسعه یافته به نام Soroban دارند که در مدارس ابتدایی استفاده آن را به دانش آموزان می آموزند تا جمع و تفریق را به خوبی یاد بگیرند. ما قصد نداریم در مورد آنها صحبت کنیم، بیایید نگاهی دقیق تر به ساختار این چرتکه بیاندازیم:
Soroban دارای تعدادی میله افقی و هر میله شامل 5 مهره است. نوار عمودی که یک مهره سمت چپ را از 4 مهره ی دیگر جدا می کند، نوار حساب نام دارد، این مهره تک نامیده می شود (طبق شکل) و مهره های سمت راست نوار حساب را ایچی می گویند. هر میله ی افقی رقمی از 0 تا 9 را نشان می دهد که با این الگوریتم، به سادگی می توان آنرا بدست آورد:
❶ ابتدا همه ی میله ها، رقم 0 را نشان می دهند. (مهره های ایچی، کاملاً راست و مهره ی تک، چپ) مثل ردیف اوّل در شکل.
❷ اگر مهره ی تک به سمت راست برود، 5 واحد اضافه می شود.
❸ به ازای هریک از مهره های ایچی که سمت چپ برود، 1 واحد اضافه می شود.
720
O-|-OOOO O-|OO-OO -O|OO-OO
ورودی:
خط اوّل فقط شامل یک عدد صحیح n است. (n ≤ 109)
خروجی:
نسخه قابل چاپ چرتکه که در هر خط، یک میله شرح یک رقم باشد را چاپ کنید.( همانطور که زیر تصویر ذکر شده)
نماد مهره به شکل حرف بزرگ انگلیسی O ، تکه میله خالی از مهره، به شکل کاراکتر - و نوار حساب به شکل | است. اگر n عددی k رقمی باشد، مانند مثال k میله با کاراکتر های گفته شده بسازید که شرایط را داشته باشند و هر میله را در یک خط چاپ کنید. (فرض کنید عدد با 0 شروع نشود)
// A Drop of the Programming Sea - adops.blog.ir #include <iostream> #include <cstring> using namespace std; int main() { string str; cin >> str; for(int i=str.length()-1; i>=0; i--) switch(str[i]) { case '0': cout << "O-|-OOOO" << endl; break; case '1': cout << "O-|O-OOO" << endl; break; case '2': cout << "O-|OO-OO" << endl; break; case '3': cout << "O-|OOO-O" << endl; break; case '4': cout << "O-|OOOO-" << endl; break; case '5': cout << "-O|-OOOO" << endl; break; case '6': cout << "-O|O-OOO" << endl; break; case '7': cout << "-O|OO-OO" << endl; break; case '8': cout << "-O|OOO-O" << endl; break; case '9': cout << "-O|OOOO-" << endl; break; } }