• pat 团体天梯赛 L1-039. 古风排版


    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 == 0) ? (s.size() / k) : (s.size() / k + 1);
            while (s.size() < cols*k) {//排版后第一列若缺字符,补足
                s += ' ';
            }
            for (int i = 0; i < s.size();i++) {
                int a = i / k;
                paint[i - a*k][cols-(a + 1)] = s[i];
            }    
            for (int i = 0; i < k;i++) {
                for (int j = 0; j < cols;j++) {
                    cout << paint[i][j];
                }
                cout << endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    HOWTO: IE8下处理iframe自适应高度
    脚印:记录一次重构,将规则生产和规则消费(执行委托)分离
    Microsoft ASP.NET 2.0 AJAX 相关信息备忘
    脚印:软件开发随想录
    脚印:关于扩展方法的使用
    MVC 模式在javascript中的应用
    2007年总结
    下拉框自动回发!
    国庆前生活学习计划
    看完色戒有感
  • 原文地址:https://www.cnblogs.com/ZefengYao/p/8647471.html
Copyright © 2020-2023  润新知