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 original order, starting top-down from the left vertical line with n 1 characters, then left to right along the bottom line with n 2 characters, and finally bottom-up along the vertical line with n 3 characters. And more, we would like U to be as squared as possible -- that is, it must be satisfied that n 1 = n 3 = max { k| k <= n 2 for all 3 <= n 2 <= N } with n 1 + n 2 + n 3- 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



 1 #include <cstdlib>
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cmath>
 5 #include <cstring>
 6 #include <cctype>
 7 #include <string>
 8 #include <algorithm>
 9 #include <queue>
10 #include <stack>
11 #include <set>
12 #include <map>
13 #include <vector>
14 
15 
16 using namespace std;
17 
18 int main(int argc, char *argv[])
19 {
20     
21     
22     char s[1000];
23     
24     gets(s);
25     
26     int len=strlen(s);
27     
28     int n1,n2,n3;
29     
30     for(n2=1;n2<=len;n2++)
31     {
32                           int ans=len-n2;
33                           if(ans%2==0)
34                           {
35                                       n1=n3=ans/2;
36                                       if(n1<=(n2+2))
37                                       break;
38                           }
39     }
40     
41     
42     int i,j;
43     
44     for(i=0;i<n1-1;i++)
45     {
46                       printf("%c",s[i]);
47                       
48                       for(j=1;j<=n2;j++)
49                       {printf(" ");}
50                       printf("%c\n",s[len-i-1]);
51     }
52     
53     
54     for(j=1;j<=n2+2;j++)
55     {
56                       printf("%c",s[i]);
57                       i++;
58     }
59     
60     puts("");
61     
62                                         
63     
64     
65     
66     
67    // system("PAUSE");
68     return EXIT_SUCCESS;
69 }

 

转载于:https://www.cnblogs.com/zjushuiping/archive/2012/05/30/2526958.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值