博客
关于我
L1-039 古风排版 (20分)
阅读量:383 次
发布时间:2019-03-05

本文共 1279 字,大约阅读时间需要 4 分钟。

L1-039 古风排版 (20分)

题目

中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

输入格式:

输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:

按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

输入样例:

4This is a test case

输出样例:

asa Tst ihe tsi ce s

思路

坑点:

  1. 如果最后一列不足,不足的部分空格补齐;
  2. 如果字符串长度小于每一列的字符数,则不足的部分还是要用空格补齐;
  3. cin.getline()读入第二行的非空字符串的时候,最后一个样例点怎么都过不去,把这部分换成getchar莫名其妙就过了,这点真的很让人疑惑,,,希望有大佬能解答。

主要思路就是,第 i i i 行从右往左,是从 i i i 个字符开始每隔 n n n 个的字符,也就是第 i i i 行第 j j j 列的字符是原字符串第 i + j ∗ n i + j * n i+jn 个字符。如果 i + j ∗ n i + j * n i+jn 超过了原字符串的长度,用空格补齐。

代码

#include
#define INF 0x3f3f3f3f#define PI acos(-1)using namespace std;typedef pair
P;typedef long long ll;const int N = 3e5 + 19;const ll mod = 1e9 + 7;char str[N];char tmp[N];int main(){ int n; cin >> n; getchar(); int m = 0; while((str[m] = getchar()) != '\n') { m++; } int cnt = 0; int k = m / n; if(m % n) k++; for(int i = 0; i < n; i++) { int nn = i; while(nn < m) { tmp[cnt++] = str[nn]; nn += n; } for(int i = k - 1; i >= 0; i--) { if(i >= cnt) cout << ' '; else cout << tmp[i]; } cout << endl; cnt = 0; } return 0;}

转载地址:http://kjwzz.baihongyu.com/

你可能感兴趣的文章
一个web前端开发者的日常唠叨
查看>>
内存分配-slab分配器
查看>>
技术写作技巧分享:我是如何从写作小白成长为多平台优秀作者的?
查看>>
[Python学习笔记]组织文件
查看>>
基于Redo Log和Undo Log的MySQL崩溃恢复流程
查看>>
如何正确的在项目中接入微信JS-SDK
查看>>
纵览全局的框框——智慧搜索
查看>>
快服务流量之争:如何在快服务中占领一席之地
查看>>
对模拟器虚假设备识别能力提升15%!每日清理大师App集成系统完整性检测
查看>>
使用Power BI构建数据仓库与BI方案
查看>>
tep用户手册帮你从unittest过渡到pytest
查看>>
12张图打开JMeter体系结构全局视角
查看>>
Spring Boot 2.x基础教程:构建RESTful API与单元测试
查看>>
[UWP 自定义控件]了解模板化控件(1):基础知识
查看>>
UWP 自定义控件:了解模板化控件 系列文章
查看>>
[UWP]从头开始创建并发布一个番茄钟
查看>>
WinUI 3 Preview 3 发布了,再一次试试它的性能
查看>>
使用命令把SpringBoot项目打包成可运行的jar包(简洁,操作性强)
查看>>
List数组排序
查看>>
VMware vSphere 离线虚拟机安装 BIND 9
查看>>