算法题目
算法分析
- 最重要的是要知道想要实现输入任意的奇数,输出相应阶数的魔方阵,我们应该要怎么样做,即找出怎么样的规律,使我们更加容易的实现编程,所以我们需要做充分的数学准备工作~
- 魔方阵和螺旋阵的输出是一样的,即在控制位数上,我们要找到最大位数(n*n),并求出相应的位数,在输出时使用%*d格式输出,控制输出位数是相当重要的一步工作~
代码实现
#include<stdio.h>
//magic square array
//6 1 8
//7 5 3
//2 9 4
int s[100][100]; //大数组放在外面哦~
int main()
{
int n; //表示奇数阶魔方阵
int k=1; //魔方阵起始数据
int i,j; //i表示行下标 j表示列下标
int i1,j1; //临时存储变量i,j 若已被占用 则重新赋值
int m; //m=n*n
int count=0;//记录m的位数 控制输出位数
printf("请输入你想要输出的奇数魔方阵阶数(请输入奇数):\n");
scanf("%d",&n);
m=n*n;
while(m!=0) //求m的位数
{
count++;
m=m/10;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
s[i][j]=0; //标识变量 表明还没有被占用
}
}
i=1;
j=(n+1)/2;
while(k<=n*n)
{
s[i][j]=k;
k++;
i1=i;
j1=j;
i=i-1;
j=j-1;
if(i==0) i=n;
if(j==0) j=n;
if(s[i][j]!=0)
{
i=i1+1;
j=j1;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%*d ",count,s[i][j]);
}
printf("\n");
}
return 0;
}
结果示例
- 示例一
- 示例二
- 示例三