浙大pat | 牛客网甲级 1045 Hello World for U (20) 字符串

Given any string of N (>=5) characters, you are asked to formthe

characters into the shape of U. For example, "helloworld" can

be printed as:

h  d

e  l

l  r

lowo

 

 That is, the charactersmust be printed in the original order, starting

top-down from the left vertical line with n1 characters, thenleft to

right along the bottom line with n2 characters, and finallybottom-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 satisfiedthat n1 =

n3 = max { k| k <= n2 for all 3 <= n2 <= N } with n1 +n2 + n3

- 2 = N.



输入描述:

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




输出描述:

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



输入例子:

helloworld!



输出例子:

h   !
e   d
l   l
lowor

这一题很简单,直接按照题目中的意思和说明来进行输出字符串就能够得到最终的结果

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string a;
	int i,j;
	cin>>a;
	int len = a.size();
	int n1,n2,n3;
	for(n3=3;;n3+=1)
	{
		if((len - n3) %2!=0)  continue;
		if((len - n3+2)/2<=n3)
		{
			n2=n1= (len - n3+2)/2;
			break;
		}
	}
	for(i=0;i<n1-1;i++)
	{
		cout<<a[i];
		for(j=0;j<n3-2;j++)
			cout<<" ";
		cout<<a[len -1 - i]<<endl;
	}
	for(i=0;i<n3;i++)
	{
		cout<<a[n1-1+i];
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值