求大神教我 20

 我来答
佛手13
高粉答主

2016-04-25 · 繁杂信息太多,你要学会辨别
知道大有可为答主
回答量:3.9万
采纳率:92%
帮助的人:3198万
展开全部
//本实例用于生成行列数为奇数的魔方阵。
//基本思想:1.将1排列在第一行的中间一列;
// 2.数字2到N*N,每一个数存放的行数为前一个数的行数减1,列数为加1.注意到了边缘时要将行列数循环起来;
// 3.如果将要存放的数按照上面的规则计算的位置已经有了数字,则将该数存放到上一个数的行数加1的位置上。
//程序如下:
#include<stdio.h>
#define N 9
void main()
{
int i,j,k,a[N][N];
//首先初始化数组,将所有的数字初始化为0.
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
a[i][j]=0;
}
}
//首先确定1的位置,在第一行中间列。
j=N/2;
a[0][j]=1;
for(k=2; k<=N*N; k++)
{
i--;
j++;
//保证行列数的循环。
if(i<0)
{
i=N-1;
}
if(j>N-1)
{
j=0;
}
if(a[i][j]==0)
{
a[i][j]=k;
}
else
//如果将要存放的数,在前面的规则下计算的位置上已经有了数字,则将该数存放到上一个数的行数加1的位置上,列数不变。
//因为行数的值已经减去了1,则下一个数存放的行数为i+2。
//列数应保持上个数的列数不变,但由于起始的程序使列数加1,所以要减去1.
//最后要保证行列数不为负数。
{
i=(i+2)%N;
j=(j-1+N)%N;
a[i][j]=k;
}
}
printf("\n\n");
for(i=0; i<N; i++)
{
printf("\t");
for(j=0; j<N; j++)
{
printf("M",a[i][j]);
}
printf("\n\n");
}
}
追问
请用VB解答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式