2015浙大计算机考研,2015浙大计算机考研机试题解.pdf

这篇博客介绍了如何用C++实现将任意字符串按照U字形排列的方法,主要涉及字符串处理和算法设计。题目要求字符串从上到下、从左到右、再从下到上按顺序打印,尽可能保持U形的方正。解题过程中,通过分析给定的数学公式确定每行字符数,并利用C++的sort函数进行排序。输出时注意每行的字符数量和间隔空格。
摘要由CSDN通过智能技术生成

天勤论坛ACM 版块版主原创,转载请注明出处!

2012 浙江大学计算机考研机试题解

我要解决什么问题?

我要如何去解决?

编码!

特别注意:为了排序方便使用了C++函数库algorithm 中的sort 函数。

第一题:Hello World for U

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 origina l order, starting top-down from the

left vertical line with n characters, then left to right along the bottom line with n characters,

1 2

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

解题思路:

这一题需要解决的问题是将一个字符串写成U 字形。拿到这一题的第一映像是U 字的

写法(可没有茴香豆的“茴”写法多),先是写第一排第一个字符,然后写第二排第一个字

符……然后是最后一排,然后是倒数第二排……但在C 语言中如果我们要这样写U 字形的

字符串就需要在数组中操作了。如果是直接输出的话,那只能自上至下一行一行输出。首先

是第一行,写出第一个字符和最后一个字符,第二行写出第二个字符和倒数第二个字符……

天勤论坛ACM 版块版主原创,转载请注明出处!

最后是最后一行。需要注意的是除了最后一行输出所有字符,前面每一行只输出两个字符。

中间还有空格来隔开每行的两个字符(具体有多少空格,待会计算)。

思路有了,看看具体的要求。字符串的长度是 N ,n1 ,n3 代表两边每列字符的数目。

n2 代表最后一行的字符数。题目中给了一个算式:

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

仔细研究这个算式,这里的 k 是不大于 n2 的,也就是说 n1 和 n3 是不大于 n2 且满足

n1+n2+n3=N+2 的最大值。那么自然有n1=n3=(N+2)/3 ,n2=N+2-(n1+n3) 。也就是说设side

为两边的字符数(包括最后一行的两端),则side=n1=n3=(N+2)/3 。设mid 为最后一行除去

两端的两个字符后剩下的字符数,mid=N-side*2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值