解题思路:
最笨的办法但感觉是最好理解的,你可以把每一个循环挨个输出一下就可以看出思路,但相当好理解
参考代码:
//可以看出图形是个正方形并且上下左右对称 #include <stdio.h> #include <string.h> int main() { int a[200][200]={0}; //全部为零初始化; int i,j,n,m; while(scanf("%d",&n)!=EOF) { m=9+(n-1)*4; memset(a,0,sizeof(a)); //每次循环初始化 for(i=1,j=1;i<=m/2;i++,j++) if(i%2==0) a[i][j]=a[i][j-1]=a[i][j-2]=a[i-1][j]=a[i-2][j]=1; for(i=m-2,j=i;i>=m/2;i--,j--) if(i%2==0) a[i][j]=a[i][j+1]=a[i][j+2]=a[i+1][j]=a[i+2][j]=1; for(i=0;i<m;i++) if(i%2==0||i%2==2) { a[i][m/2]=1; a[m/2][i]=1; //上下左右中间的全为1 } for(i=0;i<m/2-2;i++) for(j=m/2-1;a[i][j]==0;j--) if(i%2==0||i%2==2) { a[i][j]=1; a[j][i]=1; //对称性可知 } for(i=m-1;i>m/2+2;i--) for(j=m/2+1;a[i][j]==0;j++) if(i%2==0) { a[i][j]=1; a[j][i]=1; } for(i=0;i<m/2;i++) for(j=0;j<m/2;j++) a[i][m-j-1]=a[i][j]; for(i=m-1;i>m/2;i--) for(j=m-1;j>m/2;j--) a[i][m-1-j]=a[i][j]; //左右对称 for(i=0;i<m;i++) { for(j=0;j<m;j++) if(a[i][j]==0) printf("."); else printf("$"); printf("\n"); } } return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题6.9 (C++代码)论pow函数的应用浏览:1027 |
2005年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:584 |
剔除相关数 (C语言代码)浏览:1015 |
C语言训练-素数问题 (C语言代码)浏览:1662 |
多输入输出练习1 (C语言代码)浏览:1189 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:465 |
众数问题 (C语言代码)浏览:830 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:545 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:902 |
图形输出 (C语言代码)浏览:1387 |