*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;
c语言编辑魔方阵问题,我这个错在哪里
答案:3 悬赏:40 手机版
解决时间 2021-03-04 18:43
- 提问者网友:我是我
- 2021-03-04 15:01
最佳答案
- 五星知识达人网友:忘川信使
- 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
魔方好难啊
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯