永发信息网

c语言编辑魔方阵问题,我这个错在哪里

答案:3  悬赏:40  手机版
解决时间 2021-03-04 18:43
  • 提问者网友:我是我
  • 2021-03-04 15:01
*int main()
{
int i, j, k, n, temp1, temp2,a[15][15];
scanf("%d", &n);
for (i = 0; i <= n; i++)
for (j = 0; j <= n; j++)
a[i][j] = 0;

i = 0;
j = (n - 1) / 2; k = 2;
a[i][j] = 1;
for (k = 2; k <= n*n; k++)
{
if (i = 0) { temp1 = n; }
else temp1 = i - 1;
if (j = n - 1) { temp2 = 0; }
else temp2 = j + 1;
if ((a[temp1][temp2] != 0) || (i == 0 && j == n)) { temp1 = i + 1; temp2 = j; }
i = temp1; j = temp2;
a[i][j] = k;
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d", a[i][j]);
}
printf("\n");
}
system("pause");
return 0;
最佳答案
  • 五星知识达人网友:忘川信使
  • 2021-03-04 16:26


# include <stdio.h>
int main()
{
int i, j, k, n, temp1, temp2,a[15][15];
scanf("%d", &n);
for (i = 0; i <= n; i++)
for (j = 0; j <= n; j++)
a[i][j] = 0;

i = 0;
j = n / 2;
a[i][j] = 1;
for (k = 2; k <= n*n; k++)
{
if (i == 0) { temp1 = n - 1; }
else temp1 = i - 1;
if (j == n - 1) { temp2 = 0; }
else temp2 = j + 1;
if ((a[temp1][temp2] !内= 0) |容| (i == 0 && j == n)) { temp1 = i + 1; temp2 = j; }
i = temp1; j = temp2;
a[i][j] = k;
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%3d", a[i][j]);
}
printf("\n");
}
 return 0;
}
全部回答
  • 1楼网友:轻雾山林
  • 2021-03-04 19:03
参考代码: #include <stdio.h> #include <windows.h> #define N 500 //建立奇阶魔方阵 void oddCubetastic(int n) { int a[N][N]={0}; //方阵初始化 int i, j, k, num=0; //方正排列的起始位置 j=(n-1)/2; i=0; //创建魔方阵 a[i][j]=1; //把1放在第一行的中间位置 for (k=2; k<=n*n; k++) { //规律1:上一个数在第1行最后一列时,则把这个数放在上一个数的正下方 if (i==0&&j==n-1) { i=i+1; a[i][j]=k; //填入数据 continue; } //规律2:每一个数存放的行比前一个数的行减1,列数加1 i=i-1; j=j+1; //规律3:如果一个数的上一个数的行数为第1行,则这个数放在最后一行 if (i<0) { i=n-1; } //规律4:如果一个数的上一个数在最后一列,则这个数放在第1列 if (j>=n) { j=0; } //规律5:如果根据前面位置确定的位置已有数据,则把这个数放在上一个数的正下方 if (a[i][j]!=0) { i=i+2; j=j-1; } a[i][j]=k; //填入数据 } //输出魔方阵 printf("%d阶魔方阵:\n", n); for (i=0; i<n; i++) { for (j=0; j<n; j++) { printf("%5d", a[i][j]); } num+=a[i][j-1]; printf("\n"); } printf("判断值为:%d\n", num); printf("\n\n"); } //创建4*N式偶阶魔方阵 void evenCubetastic_1(int n) { int a[N][N]={0}; //方阵初始化 int i, j, k=1, num=0; //先顺序填入所有数据 for (i=0; i<n; i++) { for (j=0; j<n; j++) { a[i][j]=k++; } } for (i=0; i<=n; ) { for (j=0; j<n; j++) { if ( a[i][j]%4==0|| a[i][j]%4==1) { a[i][j]=k-a[i][j]; } } if (0==i%4) { i=i+3; continue; } if (3==i%4) { i++; continue; } } //输出魔方阵 printf("%d阶魔方阵:\n", n); for (i=0; i<n; i++) { for (j=0; j<n; j++) { printf("%5d", a[i][j]); } num+=a[i][j-1]; printf("\n"); } printf("判断值为:%d\n", num); printf("\n\n"); } //创建4*N+2式偶阶魔方阵 void evenCubetastic_2(int n) { int a[N][N]={0}; //方阵初始化 int i, j, k, num=0; //方正排列的起始位置 j=(n/2-1)/2; i=0; //创建左上角的魔方阵 a[i][j]=1; //把1放在第一行的中间位置 for (k=2; k<=(n/2)*(n/2); k++) { if (i==0&&j==n/2-1) { i=i+1; a[i][j]=k; continue; } i=i-1; j=j+1; if (i<0) { i=n/2-1; } if (j>=n/2) { j=0; } if (a[i][j]!=0) { i=i+2; j=j-1; } a[i][j]=k; } //方正排列的起始位置 j=(n+(n/2-1))/2; i=n/2; //创建右下角的魔方阵 a[i][j]=k; for (k=k+1; k<=2*(n/2*n/2); k++) { if (i==n/2&&j==n-1) { i=i+1; a[i][j]=k; continue; } i=i-1; j=j+1; if (i<n/2) { i=n-1; } if (j>=n) { j=n/2; } if (a[i][j]!=0) { i=i+2; j=j-1; } a[i][j]=k; } //方正排列的起始位置 j=(n+(n/2-1))/2; i=0; //创建右上角的魔方阵 a[i][j]=k; for (k=k+1; k<=(n+n/2)*n/2; k++) { if (i==0&&j==n-1) { i=i+1; a[i][j]=k; continue; } i=i-1; j=j+1; if (i<0) { i=n/2-1; } if (j>=n) { j=n/2; } if (a[i][j]!=0) { i=i+2; j=j-1; } a[i][j]=k; } //方正排列的起始位置 j=(n/2-1)/2; i=n/2; //创建左下角的魔方阵 a[i][j]=k; for (k=k+1; k<=n*n; k++) { if (i==n/2&&j==n/2-1) { i=i+1; a[i][j]=k; continue; } i=i-1; j=j+1; if (i<n/2) { i=n-1; } if (j>=n/2) { j=0; } if (a[i][j]!=0) { i=i+2; j=j-1; } a[i][j]=k; } //调整方阵使其成为魔方阵 int tmp; for (i=0; i<n/2; i++) { for (j=0; j<(n-2)/4; j++) { if ((i==(n-2)/4)&&(j==0)) continue; else { tmp=a[i+n/2][j]; a[i+n/2][j]=a[i][j]; a[i][j]=tmp; } } if (i==(n-2)/4&&j==(n-2)/4) { tmp=a[i+n/2][j]; a[i+n/2][j]=a[i][j]; a[i][j]=tmp; } } for (i=0; i<n/2; i++) { for (j=n/2-1; j<n; j++) { if (j>n/2-1+(n-2)/4+2) { tmp=a[i+n/2][j]; a[i+n/2][j]=a[i][j]; a[i][j]=tmp; } } } //输出魔方阵 printf("%d阶魔方阵:\n", n); for (i=0; i<n; i++) { for (j=0; j<n; j++) { printf("%5d", a[i][j]); } num+=a[i][j-1]; printf("\n"); } printf("判断值为:%d\n", num); printf("\n\n"); } //主函数 int main() { int n; int i=0; printf("求 3—N 之间的魔方阵,输入 N 的值:"); scanf("%d", &n); printf("\n"); for (i=3; i<=n; i++) { if (i%2==1) { oddCubetastic(i); //求奇阶魔方阵 } else { if (i%4==0) { evenCubetastic_1(i); //求4*N式偶阶魔方阵 } if (i%4==2) { evenCubetastic_2(i); //求4*N+2式偶阶魔方阵 } } } system("pause"); //暂停程序便于查看 return 0; }
  • 2楼网友:酒者煙囻
  • 2021-03-04 17:42
魔方好难啊
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯