解题思路:
首先要计算n=1的时候长宽和n的关系。
在计算n=2的,n=3的,找到n与长宽关系。
之后先把n=1的逐行打印出来。
这个打印的时候,用二维数组进行处理。
然后就写出来一大串的循环关系。
之后,在n=1的时候打印的时候是在二维数组(0,0)的位置,如果把这个n=3 n=2 n=1变成动态的,就需要从相对位置开始打印。
打印图形的题,就是找数量关系,找到关系然后逐行打印。如果是多重的,那么就先写出来一种可能的n=1,然后再把这一种可能的,改活。一种可能的时候是从(0,0)开始打印,而多重就是从相对位置开始打印。
具体看代码,推推数学关系,慢慢就出来了,先写固定的,再写相对的。硬着头皮依据数学关系慢慢推。
过程:建立二维数组-->在相应的位置上把数组该位置的内容改为'$'-->输出二维数组非'$'的位置输出'.'-->结束。
参考代码:
#include <stdio.h> int N; char a[200][200]; void print() { int i,j; for(i=0;i<9+(N-1)*4;i++) { for(j=0;j<9+(N-1)*4;j++) { if(a[i][j]!='$') a[i][j]='.'; printf("%c",a[i][j]); } printf("\n"); } } void f(int n) { int i,l=(N-n)*2,r=9+(N-1)*4-1-l; //根据最大围数,和目前的围数,推算相对位置。看不懂以下代码就假设N n(N=4 n=4 N=4 n=3)的数带进去看看,把图片或者图形看成二维数组,这个数据是推导出来的。 //正数第一行与倒数第一行。 for(i=l+2;i<=r-2;i++) { a[l][i]='$'; a[r][i]='$'; } //正数第二行与倒数第二行。 a[l+1][l+2]='$'; a[l+1][r-2]='$'; a[r-1][l+2]='$'; a[r-1][r-2]='$'; //正数第三行与倒数第三行。 a[l+2][l+0]='$'; a[l+2][l+1]='$'; a[l+2][l+2]='$'; a[l+2][r-0]='$'; a[l+2][r-1]='$'; a[l+2][r-2]='$'; a[r-2][l+0]='$'; a[r-2][l+1]='$'; a[r-2][l+2]='$'; a[r-2][r-0]='$'; a[r-2][r-1]='$'; a[r-2][r-2]='$'; //左右两边的中间直线区域。 for(i=l+2;i<=r-2;i++) { a[i][r]='$'; a[i][l]='$'; } } int main() { int i; scanf("%d",&N); for(i=N;i>=1;i--) //打印第几圈。 { f(i); } for(i=2*N;i<=2*N+4;i++) //图形中间的十。 { a[2*N+2][i]='$'; a[i][2*N+2]='$'; } print(); //输出 return 0; }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:605 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码) 用函数传参的方法浏览:4064 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:703 |
求圆的面积 (C语言代码)浏览:1667 |
1009题解浏览:724 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:519 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:581 |
sizeof的大作用 (C语言代码)浏览:1024 |
C语言训练-亲密数 (C语言描述,反正怎么都能对)浏览:2156 |
分糖果 (C语言代码)浏览:912 |