传送

输入输出样例:(洛咕的太丑了就不放了)

(1前面有三个空格)

这真是一群闲(qian)圈(zou)的人。大号+小号提交了不下10遍终于a了

好了我们来研究一下这些数字"美观"的构造

单独截取一个数字:

(k=2)

我们发现"|"与"-"不在同一列上(hin重要),而且k是原数字的竖线和横线的总长度,是整个数字的宽度。

在样例中,"1"的前面有三个空格,显然1比较特殊,我们来研究一下1的摆放

第一个1前面有4个空格,其他的1前面有5个空格。

结合样例,我们可以得出1是右对齐(也就是前面要有k+1个空格),不是第一个数字的1因为多了一个空格,所以前面是k+2个空格。

接下来我们就可以打表了(蒟蒻只会打表)

我们用cnt记录当前的字符在答案中的哪一列(第一个1前面的空格没有算在内,在最后会处理),同时会发现有很多数字有一些神奇的结构(见下图)

就是有三组"-",两组在同一列上的"|",所以我们可以把这种方式写成两个函数。

void work()//三组"-"
{
for(int j=;j<=k;j++)//规律画一画可得
ans[][cnt+j]='-',ans[+k][cnt+j]='-',ans[+*k][cnt+j]='-';
return ;
}
void lie()//两组"|"
{
for(int j=;j<=*k;j++)
ans[+j][cnt]='|';
ans[+k][cnt]=' ';
return ;
}

以及蒟蒻太过蒟蒻,全是1的情况只能特判掉

细节神马的见代码吧

#include<bits/stdc++.h>
using namespace std;
int k,cnt,one;
string cc;
char ans[][];
void work()
{
for(int j=;j<=k;j++)
ans[][cnt+j]='-',ans[+k][cnt+j]='-',ans[+*k][cnt+j]='-';
return ;
}
void lie()
{
for(int j=;j<=*k;j++)
ans[+j][cnt]='|';
ans[+k][cnt]=' ';
return ;
}
int main()
{
cin>>k;
cin>>cc;
cnt=;
for(int i=;i<cc.length();i++)
if(cc[i]=='')one++;//one统计1的个数,如果全是1,就特判掉
if(one==cc.length())
{
printf("\n");
for(int e=;e<=k;e++)
{
for(int j=;j<=cc.length();j++)
{
for(int i=;i<=k+;i++)
printf(" ");
printf("|");
printf(" ");
}
printf("\n");
}
printf("\n");
for(int e=;e<=k;e++)
{
for(int j=;j<=cc.length();j++)
{
for(int i=;i<=k+;i++)
printf(" ");
printf("|");
printf(" ");
}
printf("\n");
}
return ;
}
for(int i=;i<cc.length();i++)
{
if(cc[i]=='')//把10个字符打表打出来
{
if(one!=cc.length())
cnt+=k+;//空格十分之恶心
lie();
cnt+=;
}
if(cc[i]=='')
{
work();
for(int j=;j<=k;j++)
ans[+k+j][cnt]='|';
cnt+=k;cnt++;
for(int j=;j<=k;j++)
ans[+j][cnt]='|';
cnt+=;
}
if(cc[i]=='')
{
for(int j=;j<=k;j++)
ans[][cnt+j]='-',ans[+*k][cnt+j]='-';
lie();
cnt+=k;cnt++;
lie();
cnt+=;
}
if(cc[i]=='')
{
work();
cnt+=k;cnt++;
lie();
cnt+=;
}
if(cc[i]=='')
{
for(int j=;j<k;j++)
ans[+j][cnt]='|';
for(int j=;j<=k;j++)
ans[+k][cnt+j]='-';
cnt+=k;cnt++;
lie();
cnt+=;
}
if(cc[i]=='')
{
work();
for(int j=;j<k;j++)
ans[+j][cnt]='|';
cnt+=k;cnt++;
for(int j=;j<k;j++)
ans[+k+j][cnt]='|';
cnt+=;
}
if(cc[i]=='')
{
work();
lie();
cnt+=k;cnt++;
for(int j=;j<k;j++)
ans[+k+j][cnt]='|';
cnt+=;
}
if(cc[i]=='')
{
for(int j=;j<=k;j++)
ans[][cnt+j]='-';
cnt+=k;cnt++;
lie();
cnt+=;
}
if(cc[i]=='')
{
work();
lie();
cnt+=k;cnt++;
lie();
cnt+=;
}
if(cc[i]=='')
{
work();
for(int j=;j<k;j++)
ans[+j][cnt]='|';
cnt+=k;cnt++;
lie();
cnt+=;
}
} for(int i=;i<=+*k;i++)
{
if(one==cc.length())//前面要处理空格
{printf(" ");
}
for(int j=;j<=cnt;j++)
{
if(ans[i][j]=='\0')ans[i][j]=' ';//把没有赋值的地方标记成空格
cout<<ans[i][j];
}
cout<<endl;
}
}

最新文章

  1. GDB调试32位汇编堆栈分析
  2. C#自动生成漂亮的水晶效果头像
  3. 【转】MySQL连接超时断开的问题
  4. rabbitmq的web管理界面无法使用guest用户登录
  5. ASP.NET发送邮件(QQ发送)
  6. C++中string转化为常用数值类型
  7. HDU 5636 Shortest Path 分治+搜索剪枝
  8. divmod(a,b)函数
  9. SoupUI接口测试学习分享
  10. 如何将Android Studio与华为软件开发云代码仓库无缝对接(二)
  11. 前端如何处理emoji表情
  12. HDU 5288 OO‘s sequence (技巧)
  13. iOS工具——Xcode9无证书真机调试
  14. Something about SeekingJob---Resume简历
  15. 如何成为快手尬舞王?HUAWEI HiAI了解一下!
  16. 新的尝试!ComponentOne WinForm 和 .NET Core 3.0
  17. Google 的 OKR 制度与KPI 有什么不同?
  18. ConcurrentHashMap1.8源码解析
  19. LA3510 Pixel Shuffle
  20. 【转】SAP HANA学习资料大全[非常完善的学习资料汇总]

热门文章

  1. C++中的字符串类
  2. CF和OF的区别
  3. HDU-4857 逃生(反向拓扑排序 + 逆向输出)
  4. 异步Promise及Async/Await可能最完整入门攻略
  5. media查询(来源于bootstrap)
  6. django学习笔记(四)
  7. spark 在启动的时候出现JAVA_HOME not set
  8. JS中对数组元素进行增、删、改、查的方法,以及其他方法
  9. ubuntu上的疑难杂症(不定期更新……)
  10. VMware虚拟机NAT模式无法上外网