YTU 2898: C-Z型变换

来源:互联网 发布:篮球教学软件安卓版 编辑:程序博客网 时间:2024/05/21 09:49

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<<'\n';    }    return 0;}

1 0
原创粉丝点击