输入一个正整数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时
展开
 我来答
迷糊—段
2010-06-27 · TA获得超过162个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:0
展开全部
#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");

}

看看行不行!改的
创作者uBXuTffufa
2019-08-15 · TA获得超过3558个赞
知道大有可为答主
回答量:3107
采纳率:32%
帮助的人:167万
展开全部
#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");
}
看看行不行!改的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式