1 条题解
-
0
自动搬运
来自洛谷,原作者为

ingu
**搬运于
2025-08-24 21:26:13,当前版本为作者最后更新于2017-06-20 20:04:20,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
第一感觉是NOIP不会考的题目,第二感觉就是因为k的存在让此题有些意思。
每个数字是用最多7根线摆出来的。先考虑如何来保存0-9这些数字的信息,
首先想到用一个[10][7]的bool数组,保存哪些位置有线,哪些没有。
但代码中判断0和1的同时,还需要判断是横线还是竖线,所以又想到可以用一个字符串数组来保存。
比如数字8就是“-||-||-”,顺序是从上至下,从左至右。而1则是“ | | ”,空位用空格占位。 接下来开始打印,这个打印过程有些像是针式打印机打印的过程。
一共可以分成两种情况,打印横线和打印竖线。横线的是后是0、3、6这三位,刚好可以对3取余来判断。
竖线打印的时候要一下打印两条竖线,所以处理1,4的时候把2、5也解决了。
最后就是控制循环打印k个空格或者k条横线或竖线了。参考代码:
#include <bits/stdc++.h> using namespace std; int main() { int k; string s,m[10]={"-|| ||-"," | | ","- |-| -", "- |- |-"," ||- | ", "-| - |-","-| -||-", "- | | ","-||-||-","-||- |-"}; cin>>k>>s; for (int p=0;p<7;p++){ if (p==2 || p==5) continue; if (p%3==0){ for (int i=0;i<s.size();i++){ cout<<' '; for (int j=0;j<k;j++){ cout<<m[s[i]-48][p]; } cout<<" "; } cout<<endl; }else{ for(int q=0;q<k;q++){ for (int i=0;i<s.size();i++){ cout<<m[s[i]-48][p]; for (int j=0;j<k;j++){ cout<<' '; } cout<<m[s[i]-48][p+1]<<' '; } cout<<endl; } } } return 0; }
- 1
信息
- ID
- 531
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者