读题不认真,以为是水题,没想到还要小推导一下+_+
(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;
}