L1-039. 古风排版

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

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

输入格式:

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

输出格式:

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

输入样例:

4
This is a test case

输出样例:

asa T
st ih
e tsi
ce s 思路:排版,找规律。
遍历字符串,设字符串第i个字符为s[i].k为排版后每一列的字符数
当0<=i<=k-1时 s[i]放置在排版方阵的最后1列第i行
当k<=i<=2*k-1时 s[i]放置在方阵倒数第2列的第(i-k)行
...
当a*k<=i<=(a+i)k-1时 s[i]放置在方阵倒数(a+1)列第(i-ak)行
最后排版后的方阵第一列可能元素没有补满,可以事先把字符串用空格补足再排版。
AC代码:
#define _CRT_SECURE_NO_DEPRECATE
#pragma warning(disable:4996)
#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<cctype>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
#define N_MAX 100+20
int k;
char paint[N_MAX][N_MAX];
int main() {
while (cin>>k) {
string s; getchar(); getline(cin, s);
int cols = (s.size() % k == ) ? (s.size() / k) : (s.size() / k + );
while (s.size() < cols*k) {//排版后第一列若缺字符,补足
s += ' ';
}
for (int i = ; i < s.size();i++) {
int a = i / k;
paint[i - a*k][cols-(a + )] = s[i];
}
for (int i = ; i < k;i++) {
for (int j = ; j < cols;j++) {
cout << paint[i][j];
}
cout << endl;
}
}
return ;
}

最新文章

  1. JavaScript中的this
  2. 阅读笔记 1 火球 UML大战需求分析
  3. 为更好地设计数据库,重新整理sql server数据类型
  4. TSql 分层和递归查询
  5. Socket 通讯
  6. 1. Server.Transfer跳转页面抛出异常:正在终止线程
  7. Nexus Root Toolkit教程—— 解锁与Root
  8. linux的学习系列 6---打印文件和发送邮件
  9. IntelliJ IDEA的入门使用
  10. 2017-2018-1 1623 bug终结者 冲刺007
  11. 排序分析函数中对null的处理
  12. mysql并发控制之数据库锁
  13. 微信小程序跳转(当我们不知道是普通页面还是tabbar)
  14. poj1273
  15. Android 拍摄(横\竖屏)视频的懒人之路
  16. docker容器网络通信原理分析
  17. Flutter的教程:ListView
  18. kallsyms , addr to symbol
  19. Linux网络流量监控与分析工具Ntopng
  20. linux下用户和组相关的文件及相关管理命令

热门文章

  1. Freemaker基于word模板动态导出汇总整理
  2. Git 内部原理之 Git 对象哈希
  3. java util - Hex转换工具
  4. Codeforces Round #461 (Div. 2) B. Magic Forest
  5. 动态规划:ZOJ1074-最大和子矩阵 DP(最长子序列的升级版)
  6. HashMap的实现原理和底层数据结构
  7. easyui-combogrid匹配查询
  8. ckeditor添加日历控件
  9. 1、IOS学习计划
  10. PostgreSQL 行排序详解