GDUFE ACM-1029

题目:http://acm.gdufe.edu.cn/Problem/read/id/1029

 

空心三角形

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

    把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果。

Input:

每行包含一个字符和一个整数n(0<n<41),不同的字符表示不同的花纹,整数n表示等腰三角形的高。显然其底边长为2n-1。如果遇到@字符,则表示所做出来的样板三角形已经够了。

Output:

每个样板三角形之间应空上一行,三角形的中间为空。显然行末没有多余的空格。

 

Sample Input:

X 2
A 7
@

Sample Output:

 X
XXX
 
      A
     A A
    A   A
   A     A
  A       A
 A         A
AAAAAAAAAAAAA

思路:先输出第一行n-1个空格,然后输出字符,如果不止两行,输出n-2个空格,字符,2*i-1个空格(i从1开始,递增),字符,循环输出,直至最后一行,输出2n-1字符

难度:不算很难,但是我在输入那里写得很乱。。。有更好的方法

代码:
 1 #include<stdio.h>
 2 int main()
 3 {
 4     char a;
 5     int n,i,j,e,d;
 6     scanf("%c",&a);
 7     getchar();
 8     if(a=='@') goto x1;
 9     while(scanf("%d",&n)!=EOF)
10     {
11         getchar();
12         for(i=1;i<n;i++)
13             printf(" ");
14         printf("%c\n",a);
15         e=1;d=n;
16         for(i=n-2;i>0;i--)
17         {
18             for(j=d-2;j>0;j--)
19                 printf(" ");
20             printf("%c",a);
21             d--;
22             for(j=0;j<e*2-1;j++)
23                 printf(" ");
24             printf("%c\n",a);
25             e++;
26         }
27         for(i=0;i<2*n-1;i++)
28             printf("%c",a);
29         printf("\n");
30         scanf("%c",&a);
31         getchar();
32         if(a=='@') break;
33         else printf("\n");
34     }
35     x1:return 0;
36 }

 

输入方法写得整洁一点的。。

 1 #include<stdio.h>
 2 int main()
 3 {
 4     char a;
 5     int n,i,j,e,d,c;
 6         c=0;
 7     while(scanf("%c",&a)!=EOF&&a!='@')
 8     {
 9         getchar();
10                 scanf("%d",&n);
11                 getchar():
12                 if(c==1)
13                    printf("\n");
14                  c=1;
15         for(i=1;i<n;i++)
16             printf(" ");
17         printf("%c\n",a);
18         e=1;d=n;
19         for(i=n-2;i>0;i--)
20         {
21             for(j=d-2;j>0;j--)
22                 printf(" ");
23             printf("%c",a);
24             d--;
25             for(j=0;j<e*2-1;j++)
26                 printf(" ");
27             printf("%c\n",a);
28             e++;
29         }
30         for(i=0;i<2*n-1;i++)
31             printf("%c",a);
32         printf("\n");
33     }
34     return 0;
35 }

 

转载于:https://www.cnblogs.com/ruo786828164/p/6006359.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值