PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642

题目描述:

Given any string of N (≥5) characters, you are asked to form the characters into the shape of U. For example, helloworld can be printed as:

h  d
e l
l r
lowo

That is, the characters must be printed in the original order, starting top-down from the left vertical line with n1 characters, then left to right along the bottom line with n2 characters, and finally bottom-up along the vertical line with n3 characters. And more, we would like U to be as squared as possible -- that is, it must be satisfied that n1=n3=max { k | k≤n2 for all 3≤n2≤N } with n1+n2+n3−2=N.

译:给你一个 N (≥5) 个字符的字符串,要求你将这些字符组成 U 的形状。例如, helloworld 可以被打印出来:

h  d
e l
l r
lowo

也就是说,字符必须按照原来的顺序答应,从左垂线开始从上往下有 n1 行字符,最后一行从左至右有 n2 个字符,最后从下往上垂线上有 n3 个字符。更多的是,我们希望 U 尽可能的正方,也就是说它必须满足要求 n1=n3=max { k | k≤n2 for all 3≤n2≤N } 并且 n1+n2+n3−2=N.


Input Specification (输入说明):

Each input file contains one test case. Each case contains one string with no less than 5 and no more than 80 characters in a line. The string contains no white space.

译:每个输入文件包含一个测试用例,每个用例包含一行不少于 5 个字符不超过 80 个字符的字符串。这个字符串不包含空格。


Output Specification (输出说明):

For each test case, print the input string in the shape of U as specified in the description.

译:对于每个测试用例,将输入的字符串按描述的 U 形状输出。


Sample Input (样例输入):

helloworld!

Sample Output (样例输出):

h   !
e d
l l
lowor

The Idea:

首先利用 string 存储字符串,根据 n1=n3=max { k | k≤n2 for all 3≤n2≤N } 并且 n1+n2+n3−2=N. 很容易可以推出:n1 = n3 = (N + 2) / 3 ; n2 = N + 2 - 2 * n1 ; 也就是得到了 U 形状的行与列。

然后按照要求打印即可。


The Codes:

#include<bits/stdc++.h>
using namespace std;
int main(){
string s ;
cin >> s ;
int n1 = (s.size() + 2) / 3 ; // 得到 U 形状有多少行
int n2 = s.size() - 2 * n1 + 2 ; // 得到 U 形状有多少列
for(int i = 0 ; i < n1 - 1 ;){ // 除最后一行以外
printf("%c" , s[i ++]) ; // 输出每行最左边的字符
for(int k = 1 ; k < n2 - 1 ; k ++) printf(" ") ; // 输出中间的空格
printf("%c\n" , s[s.size() - i]) ; // 输出每行最右边的字符
}
cout<< s.substr(n1 - 1 , n2) << endl ; // 输出最后一行
return 0;
}

PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642的更多相关文章

  1. PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642 题目描述: Notice that the number ...

  2. PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分) 凌宸1642

    PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分) 凌宸1642 题目描述: This time, you are suppos ...

  3. PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642 题目描述: 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每 ...

  4. PAT (Advanced Level) Practice 1001 A+B Format (20 分)

    题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805528788582400 Calculate a+b and ...

  5. PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642 题目描述: The task is really simple: ...

  6. PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642 题目描述: Shuffling is a procedure us ...

  7. PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642 题目描述: Being unique is so important to peo ...

  8. PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642 题目描述: To prepare for PAT, the judge someti ...

  9. PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642 题目描述: People in Mars represent the c ...

随机推荐

  1. Learning JavaScript with MDN (call, apply, bind)

    Learning JavaScript with MDN (call, apply, bind) call, apply, bind Object.prototype.toString() 检测 js ...

  2. ES2021 & ES12

    ES2021 & ES12 ES2021 new features replaceAll String.prototype.replaceAll const str = `abc,abc`; ...

  3. 【java】ObjectOutputStream & ObjectInputStream 多次写入发生重复写入相同数据的问题

    今日份代码,解决 ObjectOutputStream 多次写入发生重复写入相同数据的问题 核心区别如下: package com.sxd.swapping.objoutputstream; impo ...

  4. 直播预告 | 全面的审计分析和权限管控——CloudQuery年终发布!

    2020年9月,CloudQuery 发布. 针对开发.运维人员面临的如何高效便捷访问.操作管理数据的问题,我们设计并研发了云原生安全数据操作平台,CloudQuery 就此诞生! 2020年结束之际 ...

  5. @media屏幕适应

    /** 屏幕特殊处理 我们用min-width时,小的放上面大的在下面,同理如果是用max-width那么就是大的在上面,小的在下面 **/ @media screen and (max-width: ...

  6. Linux就该这样学--之常用linux命令及bash基础

    Linux就该这样学--之常用linux命令及bash基础 Linux命令 管道 重定向 环境变量 常用命令 常用系统工作命令 系统状态检测命令 工作目录切换命令 文本文件编辑命令 文件目录管理命令 ...

  7. virtualbox多个网卡添加(第5-8块儿)

    virtualbox多个网卡添加(第5-8块儿) virtualbox默认只能启用4块网卡,如果4块网卡不够则需要通过命令添加.最多可以增加至8块 创建一个文件run.bat,添加如下内容到文件中,然 ...

  8. go 动态数组 二维动态数组

    go使用动态数组还有点麻烦,比python麻烦一点,需要先定义. 动态数组申明 var dynaArr []string 动态数组添加成员 dynaArr = append(dynaArr, &quo ...

  9. 这是你没见过的不一样的redis

    转: 这是你没见过的不一样的redis 提到Redis,大家一定会想到的几个点是什么呢? 高并发,KV存储,内存数据库,丰富的数据结构,单线程(6版本之前) 那么,接下来,上面提到的这些,都会一一给大 ...

  10. 剑指 Offer 53 - I. 在排序数组中查找数字 I + 二分法

    剑指 Offer 53 - I. 在排序数组中查找数字 I Offer_53_1 题目描述 方法一:使用HashMap package com.walegarrett.offer; /** * @Au ...