hdu 1200

题目概述

将一仅含小写字母的字符串的每个字符从一N列矩阵左侧开始竖着写,写到最右列可能会再添一些无关字符凑够整列,使得每一列字符数相等,再从矩阵第一行开始蛇形将每一行连接,得到新的字符串,给定这个字符串,求原始信息

时限

1000ms/2000ms

输入

第一行正整数N,第二行一个字符串,输入到N=0结束

限制

2<=N<=20;1<=字符串长度<=200

输出

每行一个字符串,为所求原始信息

样例输入

5
toioynnkpheleaigshareconhtomesnlewx
3
ttyohhieneesiaabss
0

样例输出

theresnoplacelikehomeonasnowynightx
thisistheeasyoneab

讨论

模拟,也是简单的字符串处理,一定要读好题,不然就会贡献WA,处理方法有多种,复杂或简单的都有,如果想要简单一些,就要想清楚每个输出的字符的下标应该是几,然后就是看基本代码力了,千万不能晕,只要能过样例,基本就不会再出错

题解状态

0MS,1724K,699 B,C++

题解代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<string>
#include<iostream>
using namespace std;
#define INF 0x3f3f3f3f  
#define MAXN 22
#define memset0(a) memset(a,0,sizeof(a))

int N;//列数
char str[MAXN * 10];//存放输入字符串
void fun()
{
    scanf("%s", str);//input
    int amount = strlen(str);//计算总字符数 便于算出行数
    int r = (amount / N + 1) / 2;//行数 并且进行了一番预处理 将每两行看做一大行
    for (int p = 0; p < N; p++)
        for (int i = 0; i < r; i++) {
            printf("%c", str[2 * i*N + p]);//output//先输出每大行左侧的字符
            if (2 * (i + 1)*N - p - 1 < amount)
                printf("%c", str[2 * (i + 1)*N - p - 1]);//output//然后输出每大行右侧字符 前提这个字符得存在
        }
    printf("\n");//output//最后换行
}
int main(void)
{
    //freopen("vs_cin.txt", "r", stdin);
    //freopen("vs_cout.txt", "w", stdout);

    while (~scanf("%d", &N) && N)//input
        fun();
}

EOF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值