哎呀呀,咕值要掉光了,赶快水篇题解(
solution
这题就是个纯模拟,首先我们根据输出样例看一下输出算盘的规则。
看数最大的 720
,我们发现,输出的算盘张这样(之所以我不用代码框而用 (KaTeX) 是因为代码框是对不了齐的):
[egin{matrix}
O & - & | & - & O & O & O & O \
O & - & | & O & O & - & O & O \
- & O & | & O & O & - & O & O \
end{matrix}
]
其中左面一个珠子代表 (5),下面一个珠子代表 (1),从 下往上 读。
先看最高位。
[egin{matrix}
- & O & | & O & O & - & O & O \
end{matrix}
]
看到代表 (5) 的珠子是往中间拨的,有两个代表 (1) 的珠子也是往中间拨的,所以最高位就等于 (5 imes 1 + 1 imes 2 = 7)
再看十位。
[egin{matrix}
O & - & | & O & O & - & O & O \
end{matrix}
]
代表 (5) 的珠子是没有往中间拨的,有两个代表 (1) 的珠子是往中间拨的,所以十位就等于 (=5 imes 0 + 1 imes 2 = 2)
最后看个位。
[egin{matrix}
O & - & | & - & O & O & O & O \
end{matrix}
]
代表 (5) 的珠子没有往中间拨的,代表 (1) 的珠子也没有是往中间拨的,所以个位就等于 (=5 imes 0 + 1 imes 0 = 0)
最后相结合
[egin{matrix}
ext{百位} & ext{十位} & ext{个位}\
7 & 2 & 0\
end{matrix}=720
]
那我们就可以打一个表,将 (1 sim 10) 算盘对应的状态打成表,最后字符串输入一位一位看即可。
Code
/*
Problem:CF363A
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#define line cout << endl
using namespace std;
char n[15];
string abacus[15] =
{
"O-|-OOOO",//0
"O-|O-OOO",//1
"O-|OO-OO",//2
"O-|OOO-O",//3
"O-|OOOO-",//4
"-O|-OOOO",//5
"-O|O-OOO",//6
"-O|OO-OO",//7
"-O|OOO-O",//8
"-O|OOOO-"//9
};
int main () {
cin >> n;
int len = strlen (n);
for (int i = len - 1; i >= 0; i--) { //注意!输出是从低位到高位!
cout << abacus[n[i] - '0'] << endl;
}
return 0;
}
谢谢。