题目: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 }