计蒜客:穿越者蒜头君

题目描述:       

         蒜头君是一千年前的古人,今天他穿越来现代,讶异地发现所有文字都从左到右从上到下了。这让蒜头君感到很不习惯,于是他决定用写一个程序,把文字转为从右到左,从上到下。

        但众所周知,随着时代的发展,人民教育水平也在不断的提高,一千年前的古人编程水平自然是不如我们现代人的。这不,蒜头君苦练编程,写了一段程序,可是漏洞百出,所以蒜头君决定求助于你,你能帮帮他吗?

输入格式

一个正整数n,表示转换后每列有n个字(n小于等于1000)),接下来一行字符串,表示原文章。

输出格式

从右到左,从上到下的字符,注意字符矩阵中,没有字符的位置输出空格即可。

注意:

 输出的内容是一个矩阵,且其数据存储的方式是根据“从右到左,从上到下”的顺序。

 

提示:

由此我们可以规定,列值从右向左数,行值从上向下数,那么:每一列有 n个字符,因此第j列第i行存储的恰好是字符串中第 j * n + i个字符。

样例输入
3
abcsdccccd
样例输出
dcsa
 cdb
 ccc

 【C++代码】

#include<bits/stdc++.h>
using namespace std;
char a[1000][1000];//定义数组
int main() {
    int n;
    string s;
    cin>>n>>s;//输入
    int c=s.length()/n,len=s.size();//计算出有几列
    if(s.length()%n!=0){//考虑除不尽的情况
        c+=1;
    }
    for(int i=0;i<c*n-len;i++){//如果除不尽,就要在字符串末尾补空格
    	s+=" ";
	}
    for(int i=0;i<n;i++){
        for(int j=0;j<c;j++){
            if(j*n+1<=s.size())a[i][j]=s[j*n+i];
            /*注意:
            此时存入的是反方向的,不要搞错了*/
        }
    }
    
    for(int i=0;i<n;i++){
        for(int j=c-1;j>=0;j--){//反向输出(左右)
            cout<<a[i][j];
        }cout<<endl;//记得换行
    }
    return 0;
}

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值