C语言——输出倒蛇阵
第一种:
当n=2时:
3 1
4 2
当n=3时:
7 8 1
6 9 2
5 4 3
可归纳出第i圈的四边为:
a[i][n+1-i]->a[n+1-i][n+1-i],
a[n+1-i][n-i]->a[n+1-i][i],
a[n-i][i]->a[i][i],
a[i][i+1]->a[i][n-i]
从i=1开始赋值,当i
#include<stdio.h>
int main()
{
int i,j,n,m,num[21][21];
while(scanf("%d",&n)&&n)
{
i=1;
m=1;
if(i==1) num[i][i]=1;
while(i<n+1-i)
{
for(j=i;j<=n+1-i;j++) num[j][n+1-i]=m++; // 不会变的就是i,会变的就是j!!
for(j=n-i;j>=i;j--) num[n+1-i][j]=m++;
for(j=n-i;j>=i;j--) num[j][i]=m++;
for(j=i+1;j<=n-i;j++) num[i][j]=m++;
i++;
if(i==n+1-i) {
num[i][i]=n*n;break;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(j<n) printf("%d ",num[i][j]);
else printf("%d",num[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
运行效果:
第二种:
1 8 7
2 9 6
3 4 5
#include<stdio.h>
int main()
{
int i,j,n,m,num[25][25];
while(scanf("%d",&n)&&n)
{
i=1;
m=1;
if(i==1) num[1][i]=1;
while(i<n+1-i)
{
for(j=i;j<=n+1-i;j++) num[j][i]=m++;
for(j=i+1;j<=n+1-i;j++) num[n+1-i][j]=m++;
for(j=n-i;j>=i;j--) num[j][n+1-i]=m++;
for(j=n-i;j>=i+1;j--) num[i][j]=m++;
i++;
if(i==n+1-i) {
num[i][i]=n*n;break;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(j<n) printf("%d ",num[i][j]);
else printf("%d",num[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
运行效果截图:
第三种:
倒蛇阵填数,任给一个正整数n(n<10),将1-n2分别填入矩阵,在显示器上输出如下格式的矩阵,
例如n=3时:
3 2 9
4 1 8
5 6 7
n=4时:
7 6 5 16
8 1 4 15
9 2 3 14
10 11 12 13
#include<stdio.h>
int main()
{
int i,j,n,m,num[21][21];
while(scanf("%d",&n)&&n)
{
i=1;
m=n*n;
if(n==1) num[1][1]=1;
while(i<n+1-i)
{
for(j=i;j<=n+1-i;j++) num[j][n+1-i]=m--;
for(j=n-i;j>=i;j--) num[n+1-i][j]=m--;
for(j=n-i;j>=i;j--) num[j][i]=m--;
for(j=i+1;j<=n-i;j++) num[i][j]=m--;
i++;
if(i==n+1-i) {
num[i][i]=1;break;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(j<n) printf("%d ",num[i][j]);
else printf("%d",num[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
运行截图:
还没有评论,来说两句吧...