解题思路:
最笨的办法但感觉是最好理解的,你可以把每一个循环挨个输出一下就可以看出思路,但相当好理解
参考代码:
//可以看出图形是个正方形并且上下左右对称 #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语言训练-素数问题 (C语言代码)浏览:1695 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:723 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:504 |
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1266 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:593 |
用筛法求之N内的素数。 (C语言代码)浏览:890 |
【计算两点间的距离】 (C语言代码)浏览:1522 |
C语言程序设计教程(第三版)课后习题9.2 (C语言代码)浏览:573 |
1009题解浏览:802 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:582 |