Codeup 墓地——3.3.Hello World for U

问题 B: Hello World for U

时间限制: 1 Sec  内存限制: 32 MB
提交: 261  解决: 165
[提交][状态][讨论版][命题人:外部导入]

题目描述

 

 

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

 

输入

 

 

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.

 

输出

 

 

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

 

样例输入

<span style="color:#333333">helloworld!</span>

样例输出

<span style="color:#333333">h   !
e   d
l   l
lowor
</span>

提示

 

 

 

 

这一题需要解决的问题是将一个字符串写成U字形。拿到这一题的第一映像是U字的写法(可没有茴香豆的“茴”写法多),先是写第一排第一个字符,然后写第二排第一个字符……然后是最后一排,然后是倒数第二排……但在C语言中如果我们要这样写U字形的字符串就需要在数组中操作了。如果是直接输出的话,那只能自上至下一行一行输出。首先是第一行,写出第一个字符和最后一个字符,第二行写出第二个字符和倒数第二个字符……最后是最后一行。需要注意的是除了最后一行输出所有字符,前面每一行只输出两个字符。中间还有空格来隔开每行的两个字符(具体有多少空格,待会计算)。

 

思路有了,看看具体的要求。字符串的长度是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(总长度减去两边的字符数)。同时mid也是我们输出除最后一行外前面所有行需要空出的空格数。

 

最后如何在第一行输出第一个字符和最后一个字符呢?那自然是str[0]和str[len-1-i](len为字符串的长度,也就是N)。

 

于是问题完美解决,步骤如下:

 

1)计算字符串长度len;

 

2)计算两边的字符数side=(len+2)/3;

 

3)计算最后一行中间的字符数(前面每行中间的空格数);

 

4)输出每行相应的字符。

 

由于该题目不难,也没有什么需要特别注意的,我也就不写注意点了。具体细节详见参考代码。

 

 

 

#include <stdio.h>
#include <iostream>
#include <string.h>
char str[80];
int main(){
	int N, n1, n2, n3, mid;
	while (scanf("%s", str) != EOF){
	int	N = strlen(str);
	n1 = n3 = (N + 2) / 3;
	mid = N - n1 - n3;
	for (int i = 0; i < n1-1; i++){
		for (int j = 0; j <=mid; j++){
			if (j == 0){
				printf("%c", str[i]);
			}
			if (j == mid){
				printf("%c", str[N-1-i]);
			}
			else printf(" ");
			
		}
		printf("\n");
	}
	for (int i = n1-1; i <= mid + n1; i++){
		printf("%c", str[i]);
	}
	printf("\n");
	}

	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于javaweb墓地管理系统,我可以为您提供一些介绍和演示。 墓地管理系统是一个用于管理和维护墓地信息的系统。它可以帮助管理者记录和查询墓地的基本信息,包括墓地位置、墓主人信息、墓地状态等。此外,墓地管理系统还可以提供一些额外的功能,如墓地预订、墓地维护、墓地费用管理等。 在JavaWeb开发中,可以使用Java语言和相关的技术来实现墓地管理系统。以下是一个简单的演示示例: 1. 数据库设计:首先,需要设计一个数据库来存储墓地信息。可以创建一个名为"graveyard"的数据库,并在其中创建一个名为"grave"的表,用于存储墓地信息。 2. 后端开发:使用Java语言和JavaWeb框架(如Spring MVC)来开发后端代码。可以创建一个名为"GraveController"的控制器类,用于处理墓地相关的请求。在该控制器中,可以实现一些方法,如添加墓地、查询墓地、修改墓地信息等。 3. 前端开发:使用HTML、CSS和JavaScript等前端技术来开发用户界面。可以创建一个名为"grave.jsp"的JSP页面,用于展示墓地信息和提供相关操作。在该页面中,可以使用表格来展示墓地列表,并提供一些按钮和表单来进行墓地的添加、查询和修改等操作。 4. 数据库连接:使用JDBC或者ORM框架(如MyBatis)来连接数据库,并实现数据的增删改查操作。可以在后端代码中编写相应的数据库连接和操作代码,以实现与数据库的交互。 5. 部署和测试:将开发好的代码部署到JavaWeb服务器(如Tomcat)上,并进行测试。可以通过访问相应的URL来测试墓地管理系统的功能,如添加墓地、查询墓地等。 这只是一个简单的示例,实际的墓地管理系统可能还涉及到其他功能和技术。希望这个演示能够帮助您对javaweb墓地管理系统有一个初步的了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值