输出如下图形
3 3 3 3 3
3 2 2 2 3
3 2 1 2 3
3 2 2 2 3
3 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;
}
评论