永发信息网

下面程序的功能是输出以下n*n阶(最大为9阶)方阵。能帮我分析下思路啊!!!

答案:3  悬赏:10  手机版
解决时间 2021-03-04 18:31
  • 提问者网友:凉末
  • 2021-03-03 19:35
下面程序的功能是输出以下n*n阶(最大为9阶)方阵。请分析程序填空。(以下例子是6阶方阵)
1 1 1 1 1 1
1 2 2 2 2 1
1 2 3 3 2 1
1 2 3 3 2 1
1 2 2 2 2 1
1 1 1 1 1 1
main()
{int a[9][9],n,i,j,m;
scanf("%d",&n);
m=(n+1)/2;
for(i=0;i<m;i++)
for(j=0;j<n-i;j++)
{a[i][j]=i+1;
a[【1】][j]=i+1;
a[j][i]=i+1;
a[j][【2】]=i+1;
}
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
最佳答案
  • 五星知识达人网友:轻熟杀无赦
  • 2021-03-03 20:20
这个题有问题,他的j的循环很明显不对,我尝试自己写了一下,思路是一样的,从1 开始慢慢写就明白这个函数什么意思了
#include<stdio.h>
#define M 50
main()
{int a[9][9],n,i,j,m;
scanf("%d",&n);
m=(n+1)/2;
for(i=1;i<=m;i++)
for(j=i;j<=n-i+1;j++)
{a[i][j]=i;
a[n-i+1][j]=i;
a[j][i]=i;
a[j][n-i+1]=i;
}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
全部回答
  • 1楼网友:拾荒鲤
  • 2021-03-03 23:37
#include <stdio.h> int main() { int a[9][9] = { 0 }, n, i, j, m; scanf("%d", &n); m = (n + 1) / 2; for (i = 0; i < m; i++) for (j = i; j < n - i; j++)    // 此语句你写的是错误的, 按照你的是不可能的到那样的输出的 { a[i][j] = i + 1; a[n - i - 1][j] = i + 1;    // (1) a[j][i] = i + 1; a[j][n - i - 1] = i + 1;    // (2) } for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%3d",a[i][j]); printf("\n"); } return 0; }
  • 2楼网友:归鹤鸣
  • 2021-03-03 22:00
思路: 考虑走第一圈,分4段 记录第一段 开始的i0,j0 和 到达 的 i1 另3段走法 用 i0,j0,i1 描述 第二圈和后来圈的变化是i0 = i0+1;i1=i1-1;j0=j. 一共转 n/2 圈 就成功了。 每走一格,填入数值 v=v+1, v 初值1。 #include void main() { int x[25][25]; int ii,jj,n = 6; int v=1; int i0,i1,j0,j; printf("please enter n, n=3 to 25\n"); scanf("%d",&n); i0=0; i1 = n -1; for (j=0;j<=n/2;j++) { j0 = j; for (ii=i0;ii<=i1;ii++) {x[j0][ii]=v; v++;}; for (jj=j0+1;jj<=i1;jj++) {x[jj][i1]=v; v++;}; for (ii=i1-1;ii >=i0;ii--) {x[i1][ii]=v; v++;}; for (jj=i1-1;jj >=i0+1;jj--) {x[jj][i0]=v; v++;}; i0 = i0+1;i1=i1-1; } for (jj=0;jj array[i]=x;i++;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯