
输入一个正整数n,打印如下n*n的方阵。(C程序)
输入一个正整数n,打印如下n*n的方阵。13410112591219681318207141721241516222325n=5时13410112125912202268...
输入一个正整数n,打印如下n*n的方阵。
1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25
n=5时
1 3 4 10 11 21
2 5 9 12 20 22
6 8 13 19 23 30
7 14 18 24 29 31
15 17 25 28 32 35
16 26 27 33 34 36
N=6时 展开
1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25
n=5时
1 3 4 10 11 21
2 5 9 12 20 22
6 8 13 19 23 30
7 14 18 24 29 31
15 17 25 28 32 35
16 26 27 33 34 36
N=6时 展开
2个回答
展开全部
#include <stdio.h>
#include <math.h>
#define MAX 20
int n,square[MAX][MAX];
void locate(int k,int *px,int *py)
{
int r,c;
if(k<=n*(n+1)/2) /*把原阵顺时针转过45度看*/
{
r=(int)(sqrt(2*k-0.75)-0.5)+1; /*第r行*/
c=k-r*(r-1)/2; /*第c列*/
if(r%2==0) c=r-c+1;
*py=r-c+1,*px=c;
}
else /*把原阵逆时针转过135度看*/
{
r=(int)(sqrt(2*(n*n-k+1)-0.75)-0.5)+1; /*第r行*/
c=(n*n-k+1)-r*(r-1)/2; /*第c列*/
if(r%2==0) c=r-c+1;
*py=n-r+c,*px=n-c+1;
}
}
main()
{
int i,j,k;
printf("请输入蛇形方阵的阶数n=");
scanf("%d",&n);
for(k=1;k<=n*n;++k)
{
locate(k,&i,&j);
square[i-1][j-1]=k;
}
for(i=0;i<n;++i)
{
printf("\n");
for(j=0;j<n;++j)
printf("%4d",square[i][j]);
printf("\n");
}
printf("\n");
}
看看行不行!改的
#include <math.h>
#define MAX 20
int n,square[MAX][MAX];
void locate(int k,int *px,int *py)
{
int r,c;
if(k<=n*(n+1)/2) /*把原阵顺时针转过45度看*/
{
r=(int)(sqrt(2*k-0.75)-0.5)+1; /*第r行*/
c=k-r*(r-1)/2; /*第c列*/
if(r%2==0) c=r-c+1;
*py=r-c+1,*px=c;
}
else /*把原阵逆时针转过135度看*/
{
r=(int)(sqrt(2*(n*n-k+1)-0.75)-0.5)+1; /*第r行*/
c=(n*n-k+1)-r*(r-1)/2; /*第c列*/
if(r%2==0) c=r-c+1;
*py=n-r+c,*px=n-c+1;
}
}
main()
{
int i,j,k;
printf("请输入蛇形方阵的阶数n=");
scanf("%d",&n);
for(k=1;k<=n*n;++k)
{
locate(k,&i,&j);
square[i-1][j-1]=k;
}
for(i=0;i<n;++i)
{
printf("\n");
for(j=0;j<n;++j)
printf("%4d",square[i][j]);
printf("\n");
}
printf("\n");
}
看看行不行!改的
展开全部
#include
<stdio.h>
#include
<math.h>
#define
MAX
20
int
n,square[MAX][MAX];
void
locate(int
k,int
*px,int
*py)
{
int
r,c;
if(k<=n*(n+1)/2)
/*把原阵顺时针转过45度看*/
{
r=(int)(sqrt(2*k-0.75)-0.5)+1;
/*第r行*/
c=k-r*(r-1)/2;
/*第c列*/
if(r%2==0)
c=r-c+1;
*py=r-c+1,*px=c;
}
else
/*把原阵逆时针转过135度看*/
{
r=(int)(sqrt(2*(n*n-k+1)-0.75)-0.5)+1;
/*第r行*/
c=(n*n-k+1)-r*(r-1)/2;
/*第c列*/
if(r%2==0)
c=r-c+1;
*py=n-r+c,*px=n-c+1;
}
}
main()
{
int
i,j,k;
printf("请输入蛇形方阵的阶数n=");
scanf("%d",&n);
for(k=1;k<=n*n;++k)
{
locate(k,&i,&j);
square[i-1][j-1]=k;
}
for(i=0;i<n;++i)
{
printf("\n");
for(j=0;j<n;++j)
printf("%4d",square[i][j]);
printf("\n");
}
printf("\n");
}
看看行不行!改的
<stdio.h>
#include
<math.h>
#define
MAX
20
int
n,square[MAX][MAX];
void
locate(int
k,int
*px,int
*py)
{
int
r,c;
if(k<=n*(n+1)/2)
/*把原阵顺时针转过45度看*/
{
r=(int)(sqrt(2*k-0.75)-0.5)+1;
/*第r行*/
c=k-r*(r-1)/2;
/*第c列*/
if(r%2==0)
c=r-c+1;
*py=r-c+1,*px=c;
}
else
/*把原阵逆时针转过135度看*/
{
r=(int)(sqrt(2*(n*n-k+1)-0.75)-0.5)+1;
/*第r行*/
c=(n*n-k+1)-r*(r-1)/2;
/*第c列*/
if(r%2==0)
c=r-c+1;
*py=n-r+c,*px=n-c+1;
}
}
main()
{
int
i,j,k;
printf("请输入蛇形方阵的阶数n=");
scanf("%d",&n);
for(k=1;k<=n*n;++k)
{
locate(k,&i,&j);
square[i-1][j-1]=k;
}
for(i=0;i<n;++i)
{
printf("\n");
for(j=0;j<n;++j)
printf("%4d",square[i][j]);
printf("\n");
}
printf("\n");
}
看看行不行!改的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询