2898: C-Z型变换
时间限制: 1 Sec 内存限制: 128 MB
提交: 148 解决: 32
[提交][状态][讨论版][命题人:lyh]
题目描述
让我们来玩个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
AC代码:
#include<iostream>
#include<string.h>
using namespace std;
char str[105];
char a[105][105];
void print()
{
for(int i=0;i<105;i++)
for(int j=0;j<105;j++)
{
if(a[i][j]!=0)
cout<<a[i][j];
}
cout<<endl;
}
int main() {
int d;
while(cin>>str) {
cin>>d;
memset(a,0,sizeof(a));
int len=strlen(str);
int i=0,x=0;//i为当前访问数组下标,x为列
while(i<len) {
for(int j=0; j<d; j++) {
a[j][x]=str[i++];
if(i>=len)
break;
}
x++;
for(int j=d-2; j>0; j--) {
a[j][x]=str[i++];
if(i>=len)
break;
}
x++;
}
print();
}
}