Uのための1031のHello World(20分)

Nの任意の文字列(≥5)文字を考えると、あなたはの形に文字を形成するように求められます  U例えば、  helloworld として印刷することができます。

h  d
e  l
l  r
lowo

すなわち、文字が最終的にN 2つの文字とボトムラインに沿って左から右へ、そして次に、nは1つの文字で左側の縦線からトップダウンを開始、元の順序で印刷されなければならないれるボトムnは3つの文字を縦線に沿ってアップ。そして、もっと、私たちは希望  U できる限りの二乗のように-つまり、それは、n 1 = N 3 =最大{Kことを確認しなければなりません| N 1 + N 2 + N 3 -2を有する全て3≤n2≤N} = Nためk≤n2。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各ケースは5未満とラインで超えない80の文字なしで1つの文字列が含まれています。文字列には空白が含まれていません。

出力仕様:

各テストケースのために、説明に指定されているU形状の入力文字列を印刷します。

サンプル入力:

helloworld!

サンプル出力:

h   !
e   d
l   l
lowor
#include <string>
#include <iostream>

using namespace std;

int main()   //没有技术含量的一个 题
{
	//freopen("in.txt", "r", stdin);
	string s;
	cin >> s;

	int n1, n2, n3, N = s.length();;
	for (n2 = 3; n2 <= N; n2++)  //这个地方注意要跳出两层循环  用了goto语句
	{
		for (n1 = 1; n1 <= n2; n1++)
		{
			if (2 * n1 + n2 - 2 == N)
			{
				goto output;
			}
		}
	}

output:
	for (int i = 0; i < n1 - 1; i++)
	{
		cout << s[i];
		for (int i = 0; i < n2 - 2; i++)
		{
			cout << " ";
		}
		cout << s[N - i - 1]<<endl;
	}
	for (int i = n1 - 1; i <= N - n1; i++)
	{
		cout << s[i];
	}
	//fclose(stdin);
	return 0;
}

 

おすすめ

転載: blog.csdn.net/haohao0626/article/details/92318112