✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:PAT题解集合
📝原题地址:题目详情 - 1031 Hello World for U (pintia.cn)
🔑中文翻译:U 形 Hello World
📣专栏定位:为想考甲级PAT的小伙伴整理常考算法题解,祝大家都能取得满分!
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
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
- 1
- 2
- 3
- 4
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.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.
Output Specification:
For each test case, print the input string in the shape of U as specified in the description.
Sample Input:
helloworld!
- 1
Sample Output:
h ! e d l l lowor
- 1
- 2
- 3
- 4
给定一个长度为 N
的字符串,请你将它以 U
形输出。
也就是说,必须按照原始顺序输出字符,左垂直线自上而下共有 n1
个字符,底部行从左到右共有 n2
个字符,右垂直线自下而上共有 n3
个字符。
另外,必须满足 n1=n3=max{k|k≤n2对于所有3≤n2≤N}
以及 n1+n2+n3−2=N
。
由题可知:
n1+n2+n3-2=N
n1=n3
n1<=n2
所以可得:
n2=N-2*n1+2
再带入到 n1<=n2
可得:
n1<=N+2*n1+2
即 n1<=(N+2)/3
故 n1=n3=(N+2)/3
且 n2=n1+(N+2)%3
然后按照 U
字形顺序将字符串填入数组,最后输出数组即可。
#include
using namespace std;
const int N = 100;
char g[N][N];
int main()
{
string str;
cin >> str;
//计算n1,n2,n3
int n1 = (str.size() + 2) / 3;
int n2 = n1 + (str.size() + 2) % 3;
//将字符串按照U字形填入数组
int k = 0;
for (int i = 1; i <= n1; i++) g[i][1] = str[k++];
for (int i = 2; i <= n2; i++) g[n1][i] = str[k++];
for (int i = n1 - 1; i >= 1; i--) g[i][n2] = str[k++];
//输出填充后
for (int i = 1; i <= n1; i++)
{
for (int j = 1; j <= n2; j++)
if (g[i][j]) cout << g[i][j];
else cout << " ";
cout << endl;
}
return 0;
}