Loading

【题解】Codeforces[CF363A] Soroban

哎呀呀,咕值要掉光了,赶快水篇题解(

solution

这题就是个纯模拟,首先我们根据输出样例看一下输出算盘的规则。

看数最大的 720 ,我们发现,输出的算盘张这样(之所以我不用代码框而用 \(\KaTeX\) 是因为代码框是对不了齐的):

\[\begin{matrix} O & - & | & - & O & O & O & O \\ O & - & | & O & O & - & O & O \\ - & O & | & O & O & - & O & O \\ \end{matrix} \]

其中左面一个珠子代表 \(5\),下面一个珠子代表 \(1\),从 下往上 读。

先看最高位。

\[\begin{matrix} - & O & | & O & O & - & O & O \\ \end{matrix} \]

看到代表 \(5\) 的珠子是往中间拨的,有两个代表 \(1\) 的珠子也是往中间拨的,所以最高位就等于 \(5 \times 1 + 1 \times 2 = 7\)

再看十位。

\[\begin{matrix} O & - & | & O & O & - & O & O \\ \end{matrix} \]

代表 \(5\) 的珠子是没有往中间拨的,有两个代表 \(1\) 的珠子是往中间拨的,所以十位就等于 \(=5 \times 0 + 1 \times 2 = 2\)

最后看个位。

\[\begin{matrix} O & - & | & - & O & O & O & O \\ \end{matrix} \]

代表 \(5\) 的珠子没有往中间拨的,代表 \(1\) 的珠子也没有是往中间拨的,所以个位就等于 \(=5 \times 0 + 1 \times 0 = 0\)

最后相结合

\[\begin{matrix} \text{百位} & \text{十位} & \text{个位}\\ 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;
}

谢谢。

posted @ 2020-07-22 19:41  AgrumeStly  阅读(153)  评论(0编辑  收藏  举报