zoukankan      html  css  js  c++  java
  • YTU 2898: C-Z型变换

    2898: C-Z型变换

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 53  解决: 15

    题目描述

    让我们来玩个Z型变换的游戏,游戏的规则如下:
    给你一个字符串,将它以Z字型的形状不断伸展开,
    如给定字符串为"abcdefghijklmnopqrstuvwxyz",
    假设Z字形的宽度为4,那么我们展开为
    a        g        m        s        y
    b     f  h     l  n     r   t     x  z
    c  e     i  k     o  q     u  w
    d         j         p         v
       
    现在我们一行一行读出字母,空格均省略,则得到:
    agmsybfhlnrtxzceikoquwdjpv
    明白了吗?
    那么问题来了:已知给定的字符串和Z字形的宽度,求展开后按行读取的字符串是什么。

    输入

    多组数据输入,直到文件末。每行包含一个字符串s代表需要展开的字符串,一个正整数t,代表Z字形的宽度
    字符串中只包含英文字母,长度<=100。

    输出

    每组数据输出展开后按行读取组成的字符串。

    样例输入

    PAYPALISHIRING 3

    样例输出

    PAHNAPLSIIGYIR

    你  离  开  了  ,  我  的  世  界  里  只  剩  下  雨  。  。  。

    #include <iostream>
    using namespace std;
    int main()
    {
        char s[100];
        char out[100];
        int n,i,len,j,temp,temp1,temp2,count;
        while(cin>>s,cin>>n)
        {
            count=0;
            len=0;
            temp=2*(n-1);
            while(s[len++]!=NULL);
            len--;
            if(n==1)cout<<s;
            else
            {
                for(i=0; i<n; i++)
                {
                    if(i==0||i==n-1)
                    {
                        out[count++]=s[i];
                        for(j=temp; i+j<len; j+=temp)
                            out[count++]=s[i+j];
                    }
                    else
                    {
                        out[count++]=s[i];
                        temp1=temp-2*i;
                        temp2=2*i;
                        if(temp1==temp2)
                        {
                            for(j=temp1; i+j<len; j+=temp1)
                                out[count++]=s[i+j];
                        }
                        else
                        {
                            for(j=temp1; i+j<len; j+=temp)
                            {
                                out[count++]=s[i+j];
                                if(i+j+temp2<len)
                                    out[count++]=s[i+j+temp2];
                            }
                        }
                    }
                }
                for(i=0; i<len; i++)
                    cout<<out[i];
            }
            cout<<'
    ';
        }
        return 0;
    }

  • 相关阅读:
    linux基础——文件的压缩解压缩以及vim编辑
    linux基础——关于chmod用户权限和文件的相关操作
    linux基础的基础命令操作
    操作系统和网络基础之网络协议
    计算机基础
    【python小记】访问mysql数据库
    Qt去掉treeview项的焦点虚线
    嵌入式qt显示中文和隐藏鼠标
    【vim小记】自动保存配置
    重回ubutntu12.04小记(装完ubuntu做的几件事)
  • 原文地址:https://www.cnblogs.com/im0qianqian/p/5989611.html
Copyright © 2011-2022 走看看