官网
1031. Hello World for U (20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
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.
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!
Sample Output:
h !
e d
l l
lowor
题目大意
- 1.把给出来的长度大于等于5的字符串化成U字型输出即可。
解题思路
- 1.
感觉是一道数学问题n2+2n1-2=N(其中n2代表下边的长度,n1=n3为左右的高度),且 n1=n3<=n2,那么3n1<=n+2,即:n1<=(N+2)/3,按题目要求n1=n3取最大值(N+2)/3即可。
AC代码
#include<iostream>
#include<string>
using namespace std;
int main(){
string a;
cin >> a;
int len = a.length();
//求左边的高度tem_n1,以及中间空白点的个数tem_blank
int tem_n1 = (len + 2) / 3;
int tem_blank = len - 2 * tem_n1;
//输出
for (int i = 0; i < tem_n1-1; i++)
{
cout << a[i];
for (int j = 0; j < tem_blank; j++)
{
cout << " ";
}
cout << a[len - 1 - i] << endl;
}
for (int i = tem_n1-1; i <= len - tem_n1; i++)
{
cout << a[i];
}
cout << endl;
return 0;
}