1031 Hello World for U (20分)
读题不认真,以为是水题,没想到还要小推导一下+_+
\(n_1\)和\(n_3\)是左右两条竖线从上到下的字符个数,\(n_2\)是底部横线从左到右的字符个数。
要求:
- \(n_1=n_3=max \{ k | k≤n_2\ for\ all\ 3≤n_2≤N \}\)
- \(n_1+n_2+n_3-2=N\)
- \(N>=5\)
设\(n = N+ 2\),因为\(2n_1 + n_2 = n\),且\(n_2 >= n_1\), 要求\(n_1\)尽可能大
- 如果\(n \mod 3 = 0\),\(n\)正好被\(3\)整除,因为要求\(n_1\)尽可能大,故\(n_1 = n_2 = n_3\)
- 如果\(n \mod 3 = 1\),因为\(n_2\)要比\(n_1\)大,所以把多出来的那1个给\(n_2\)
- 如果\(n \mod 3 = 2\), 就把多出来的那\(2\)个给\(n_2\)
string s;
int n;
int main()
{
cin>>s;
n=s.size();
int h=(n+2)/3;
int b=h+(n+2)%3;
for(int i=0;i<h-1;i++)
{
cout<<s[i];
for(int j=0;j<b-2;j++)
cout<<' ';
cout<<s[n-1-i]<<endl;
}
for(int i=0;i<b;i++)
{
cout<<s[h-1+i];
}
cout<<endl;
//system("pause");
return 0;
}