1. VB中怎么编程3阶魔方阵

Private Sub Command1_Click()

Dim a(20, 20) As Integer, n As Integer

n = InputBox("请输入一个奇数 N=")

Print "N="; n

i = 1

j = n 2 + 1

k = 1

For i1 = 1 To n

For i2 = 1 To n

a(i, j) = k

k = k + 1

If i2 < n Then

i = i - 1

j = j + 1

If i = 0 Then i = n

If j > n Then j = 1

Else

i = i + 1

End If

Next i2

Next i1

For i = 1 To n

For j = 1 To n

Print Tab(4 * j); a(i, j);

Next j

Print

Next i

End Sub

2. 请求C++高手一道魔方的编程题(急需)

#include<iostream>
using namespace std;
class magic
{
public:
void getdata();
void setfirstmagic();
void generatemagic();
void printmagic();
private:
int m[4][4];
int step;
int first;
int sum;
} ;
void magic::getdata()
{
cin>>first>>step>>sum;

}
void magic::setfirstmagic()
{

int temp=first;
for(int i=0;i<4;i++)
{
for(int n=0;n<4;n++)
{
m[i][n]=temp;
temp+=step;
}
}
}
void magic::generatemagic()
{

for(int i=0,int n=0;i<4,n<4;i++,n++)
{

m[i][i]=sum-m[i][i];
}
for(i=0, n=3;i<4;i++,n--)
{
m[i][n]=sum-m[i][n];
}
}
void magic::printmagic()
{

for(int i=0;i<4;i++)
{
for(int n=0;n<4;n++)
{cout<<m[i][n]<<" ";}
cout<<"\n";
}
}
int main()
{
magic square;
cout<< "初始魔方:\n";
square.getdata();
square.setfirstmagic();
square.printmagic();
cout << "生成最终魔方:\n";
square.generatemagic();
square.printmagic();
system("pause");
return 0;
}

已经运行过了,木有问题!

3. 求魔方的算法 我指的是计算机编程算法 最好有C++ 或C#的源代码

具体做法:
方法一;
/*此程序使我按照上面介绍的魔方阵的规律编写的,不过只能求奇数魔方阵,经过测试可以算到508阶*/
#define N 7
#include<stdio.h>
void main()
{
int a[N][N],i,j,k;
for(i=0;i<N;i++) /*先处理第一行*/
for(j=0;j<N;j++)
{
a[i][j]=0; /*先令所有元素都为0*/
}
j=(N-1)/2; /*判断j的位置*/
a[0][j]=1; /*将1放在第一行中间一列*/
for(k=2;k<=N*N;k++) /*再从2开始处理*/
{
i=i-1; /*存放的行比前一个数的行数减1*/
j=j+1; /*存放的列比前一个数的列数加1*/
if((i<0)&&(j==N)) /*前一个数是第一行第N列时,把下一个数放在上一个数的下面*/
{
i=i+2;
j=j-1;
}
else
{
if(i<0) /*当行数减到第一行,返回到最后一行*/
i=N-1;
if(j>N-1) /*当列数加到最后一行,返回到第一行*/
j=0;
}
if(a[i][j]==0) /*如果该元素为0,继续执行程序*/
a[i][j]=k;
else /*如果该元素不为0,就说明要填的数的位置已经被占,则该数放在上一个数的下面*/
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=0;i<N;i++) /*输出数组*/
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
}

方法二:
/*这个是网友qfyzy为帮助我找错而提供的,可以算到99阶*/
#define N 7
#include<stdio.h>
void main()
{
int a[N][N]={0},i=0,j,k; /*先令所有元素都为0*/
j=(N-1)/2;
i=0;
for(k=1;k<=N*N;) /*开始处理*/
{
if((i<0)&&(j==N)) /*前一个数是第一行第N列时,把下一个数放在上一个数的下面*/
{
i=i+2;
j=j-1;
}
else if(i<0) /*当行数减到第一行,返回到最后一行*/
i=N-1;
else if(j>N-1) /*当列数加到最后一行,返回到第一行*/
j=0;
else if(!a[i][j]){ /*如果该元素为0,继续执行程序*/
a[i][j]=k++;
i=i-1;
j=j+1;
}
else /*如果该元素不为0,就说明要填的数的位置已经被占,则该数放在上一个数的下面*/
{
i=i+2;
j=j-1;
}
}
for(i=0;i<N;i++) /*输出数组*/
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
}

4. c语言中魔方阵编程的思路

/*
所谓魔方阵是指这样的的方阵:
它的每一行、每一列和对角线之和均相等。
输入n,要求打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。
例如,当n=3时,魔方阵为:
8 1 6
3 5 7
4 9 2
魔方阵中各数排列规律为:
① 将“1”放在第一行的中间一列;
② 从“2”开始直到n×n为止的各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数同样加1;
③ 如果上一数的行数为1,则下一个数的行数为n(最下一行),如在3×3 方阵中,1在第1行,则2应放在第3行第3列。
④ 当上一个数的列数为n时,下一个数的列数应为1,行数减1。如2在第3行第3列,3应在第2行第1列。

⑤如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。

如按上面的规定,4应放在第1行第2列,但该位置已被1占据,所以4就放在3的下面。由于6是第1行第3列(即最后一列),故7放在6下面。
*/

#include"stdio.h"

void main()
{
int i,n=5;
printf("---------------打印魔方阵-------------\n\n");
int a[5][5];
for( i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=0;//初始化

i=0;
int j=n/2;
int t=1;
int si=0;
int sj=0;//记录上一个数的位置

while(t<=n*n)
{
//printf("\n%4d\n\n",t);
if(a[i][j]==0)
a[i][j]=t;

else
{
if(si==0 && sj==n-1)
{
a[si+1][sj]=t;
i=si+1;
j=sj;
}
if(si!=n-1)
{
a[si+1][sj]=t;
i=si+1;
j=sj;
}

if(si==n-1)
{
a[0][sj]=t;
i=0;
j=sj;
}
}

si=i;
sj=j;

/*计算下一个元素的位置*/
if(i==0)
i=n-1;
else
i=i-1;

if(j==n-1)
j=0;
else
j=j+1;

t=t+1;
}

for(i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n\n");
}

}

5. VB:如何编程:魔方方阵,

Private Sub Command1_Click()
Dim n As Integer
Dim r() As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim s As String

Me.Cls

n = InputBox("输入N")
If n Mod 2 <> 1 Then
MsgBox "N必须是奇数", vbCritical
Exit Sub
End If
ReDim r(1 To n * n) As Integer
k = 1
i = 1
j = n \ 2 + 1
While k <= n * n
r((i - 1) * n + j) = k
i = i - 1
j = j + 1
If i < 1 Then i = n
If j > n Then j = 1
If r((i - 1) * n + j) <> 0 Then
i = i + 2
j = j - 1
If i > n Then i = i - n
If j < 1 Then j = j + n
End If
k = k + 1
Wend
s = String(Len(Trim(Str(n * n))), "0")

For i = 1 To n
For j = 1 To n
Print Format(r((i - 1) * n + j), s); " ";
Next j
Print
Next i
End Sub

Private Sub Form_Load()
Me.FontName = "宋体"

End Sub