解题思路:
最笨的办法但感觉是最好理解的,你可以把每一个循环挨个输出一下就可以看出思路,但相当好理解
参考代码:
//可以看出图形是个正方形并且上下左右对称 #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 人评分
printf基础练习2 (C语言代码)浏览:746 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:531 |
字符串输入输出函数 (C语言代码)浏览:2480 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:398 |
简单的a+b (C语言代码)浏览:524 |
C语言训练-自守数问题 (C语言代码)浏览:740 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:498 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:712 |
求教大神。。。。1063,统计字符。浏览:11684 |
自编的贪吃蛇小游戏,代码装上easyx图形库就能运行。浏览:941 |