输出如下图形3 3 3 3 33 2 2 2 33 2 1 2 33 2 2 2 33 3 3 3 3 最笨版://任意输入一个数,实现其正方形#include <stdio.h>#include <conio.h>#include <time.h> int main (){ clock_t start, end; //while(1) // { int a=0,n,b; int i,j; int c[200][200] ; int s,h,q; printf("请输入一个整数\n"); scanf("%d",&n); q=n; b=2*n-1; start = clock(); while (n>0) { for (i=a;i<b;i++) { for (j=a;j<b;j++) c[i][j]=n; } n--; a++; b--; } for (s=0;s<(2*q-1);s++) { for (h=0;h<(2*q-1);h++) printf("%2d",c[s][h]); printf("\n"); }//}end = clock(); printf("\nThe time was: %f\n", (end - start) / CLK_TCK); getch(); return 0;} 改进版:/*说明: j列 a b c d e i 行 a 3 3 3 3 3 b 3 2 2 2 3 c 3 2 1 2 3 d 3 2 2 2 3 e 3 3 3 3 3 在(b,b)时需要将3减1,而此时j<i 在(b,d)时需要将2加1,而此时j>2*s-i(s为最外圈的数字) 在c行之前2*s-i表示从右上到中心数字1的位置,而c行之后表示从1到左下的位置 而当j<i与j>=i都不满足时则表示打印自减后的数如(b,b)(b,c)(b,d) 07.4.16写注释 */#include<stdio.h> int main(){ int n,i,j; printf("请输入一个数,q to end\n"); while (scanf("%d",&n)==1) { int s; //s为最外圈的数字 s=n; for (i=1;i<=2*s-1;i++) //控制行 { for (j=1;j<=2*s-1;j++) //每一列打印的个数 { if (j<i&&i<=s) printf("%2d",n--); //i<=s表示上半部分,j<i表示若成立则自减 if (j>=i&&j<=2*s-i&&i<=s) printf("%2d",n); //此句表示打印中间的那些重复的数字,若j>=i成立输出自减后的数字 //2*s-i<=s表示在自增以前进行 if (2*s-i<j&&i<=s) printf("%2d",++n); //若2*s-i<j表示进行自增 if (j<2*s-i&& i>s) printf("%2d",n--); if (j>=2*s-i&&j<=i&&i>s) printf("%2d",n); if (i<j&&i>s) printf("%2d",++n); } printf("\n"); } printf("请输入一个数,q to end\n"); } getchar(); getchar(); return 0;}

评论