博客
关于我
L1-039 古风排版 (20分)
阅读量:382 次
发布时间: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/

你可能感兴趣的文章
不停机替换线上代码? 你没听错,Arthas它能做到
查看>>
sharding-jdbc 分库分表的 4种分片策略,还蛮简单的
查看>>
分库分表的 9种分布式主键ID 生成方案,挺全乎的
查看>>
MySQL不会丢失数据的秘密,就藏在它的 7种日志里
查看>>
Python网络编程之socket应用
查看>>
Python开发之序列化与反序列化:pickle、json模块使用详解
查看>>
回顾-生成 vs 判别模型-和图
查看>>
Python 的 type 及常用魔法方法(上)
查看>>
采坑 - 字符串的 "" 与 pd.isnull()
查看>>
无序列表 - 链表
查看>>
SQL 查询强化 - 数据准备
查看>>
SQL 强化练习 (四)
查看>>
SQL 强化练习 (八)
查看>>
Excel 拼接为 SQL 并打包 exe
查看>>
Pandas数据分析从放弃到入门
查看>>
Matplotlib绘制漫威英雄战力图,带你飞起来!
查看>>
机器学习是什么
查看>>
《小王子》里一些后知后觉的道理
查看>>
《自私的基因》总结
查看>>
《山海经》总结
查看>>