首页 > 其他 > 详细

PAT A1031 Hello World for U (20) [图形打印]

时间:2020-04-29 01:02:00      阅读:81      评论:0      收藏:0      [点我收藏+]

题目

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 lef vertical line with n1 characters, then lef 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

题目分析

输入一个不包含空格的字符串,输出为u型
重难点:分析出n1,n2,n3规律
题意:n1=n3=k<=n2。n1,n3尽可能大且要小于n2

解题思路

Code

#include <iostream>
#include <cstring>
using namespace std;
int main(int argc,char * argv[]) {
	char c[81],u[30][30];
	memset(u,‘ ‘,sizeof(u));
	scanf("%s",c);
	int n = strlen(c);
	// 第一种计算方法 
//	int n1=(n+2)/3,n3=n1,n2=n+2-2*n1,index=0;
	// 第二种计算方法
	int n1=(n+2)/3,n3=n1,n2=(n+2)/3+(n+2)%3,index=0;
	for(int i=0; i<n1; i++) u[i][0]=c[index++];
	for(int i=1; i<=n2-2; i++) u[n1-1][i]=c[index++];
	for(int i=n1-1;i>=0;i--) u[i][n2-1]=c[index++];
	for(int i=0; i<n1; i++) {
		for(int j=0; j<n2; j++)
			printf("%c",u[i][j]);
		printf("\n");
	}
	return 0;
}

PAT A1031 Hello World for U (20) [图形打印]

原文:https://www.cnblogs.com/houzm/p/12798105.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!