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

    谢谢。

  • 相关阅读:
    让PHP开发者事半功倍的十大技巧
    Sublime Text 3 快捷键总结
    localhost访问错误Forbidden You don't have permission to access / on this server.解决办法(亲测)
    html在一个页面显示另一个页面的部分内容
    db2许可证安装
    spring3中使用注解方式实现定时器调度任务
    c3p0详细设置
    hibernate.cfg.xml详细配置
    ExtJS学习(面板)
    汉诺塔算法
  • 原文地址:https://www.cnblogs.com/-TNT-/p/solution-cf363a.html
Copyright © 2011-2022 走看看