zoukankan      html  css  js  c++  java
  • 【题解】「CF363A」Soroban

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

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

    谢谢。

  • 相关阅读:
    强连通 HDU 1827
    强联通 HDU 2767 3836
    强连通 HDU 1269
    网络流 poj 2135
    强联通 poj 2762
    android20-[【转】Android的EditText自动获取焦点并弹出输入法问题]
    windows开发中的一点总结
    android19
    android18
    android17
  • 原文地址:https://www.cnblogs.com/-TNT-/p/solution-cf363a.html
Copyright © 2011-2022 走看看