第一种情形:规律性比较强的题目
题目描述
输入一个高度h,输出一个高为h,上底边为h的梯形。
输入格式
一个整数h(1<=h<=1000)。
输出
h所对应的梯形。
样例输入
5
样例输出
*****
*******
*********
***********
*************
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 int h; 7 int max,temp; 8 int i,j; 9 10 while( scanf("%d",&h)!=EOF) 11 { 12 max = h+( h-1)*2; //计算最后一行包含的*个数 13 for( i=1; i<=h; i++) 14 { 15 temp = (h-i)*2; //计算每一行的空格个数 16 for( j=1; j<=max; j++) 17 { 18 if( temp ) 19 { 20 printf(" "); 21 temp --; 22 } 23 else printf("*"); 24 } 25 printf(" "); 26 } 27 } 28 29 return 0; 30 31 }
第二种情形是不规则的图形输出,可以考虑使用二维数组(类似坐标系)
- 题目描述:
-
把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。
- 输入:
-
输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;
- 输出:
-
输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。
- 样例输入:
- 11 B A
- 5 @ W
- 样例输出:
AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
AAAAAAAAA
@@@
@WWW@
@W@W@
@WWW@
@@@
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 char a,b,tmp; 7 int n; 8 int flag = 1; //判断是否是第一组数据 9 int i,j,k; 10 int x,y; 11 int out[82][82]; 12 13 while( scanf("%d %c %c",&n,&a,&b)==3){ 14 if( flag ) flag = 0; 15 else printf(" "); 16 17 for( i=1,j=1; i<=n; i+=2,j++){ 18 x = y = n/2+1; //中心位置(n时奇数) 19 x -= j-1; 20 y -= j-1; //每个圈左上角坐标 21 tmp = j%2==1?a:b; //j为奇数时使用第一个字符,偶数使用第二个 22 for( k=1; k<=i; k++){ 23 out[x+k-1][y] =tmp; //上边 24 out[x][y+k-1] =tmp; //左边 25 out[x+k-1][y+i-1] = tmp; //下边 26 out[x+i-1][y+k-1] = tmp; //右边 27 } 28 } 29 if( n!=1 ){ 30 //将四角置为空格 31 out[1][1]=' '; 32 out[n][1]=' '; 33 out[1][n]=' '; 34 out[n][n]=' '; 35 } 36 for( i=1; i<=n; i++){ 37 for( j=1; j<=n; j++){ 38 printf("%c",out[i][j]); 39 } 40 printf(" "); 41 } 42 } 43 return 0; 44 }