该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一女生同学让帮做魔方矩阵,以为很简单,然后做了将近一个小时。。。最后还是用最扯淡的办法做出来的,有没有做过的给点算法思路,让我末日也死的安心。先上我的程序、
#include
#include
#include main()
{
int a[7][7],i,j,loop=0,b[6],k,l,data=1,c[4],n;
printf("请输入方阵宽度:");
scanf("%d",&n);
if(n>7)
{
printf("输入的数据过大!\n");
exit(0);
}
srand((unsigned)time(NULL));
for(i=0;i
for(j=0;j
{
a[i][j]=data;
data++;
}
while(loop==0)
{
for(i=0;i<6;i++)
b[i]=loop; for(i=0;i
{
b[0]+=a[0][i];
b[1]+=a[i][0];
b[2]+=a[n-1][i];
b[3]+=a[i][n-1];
b[4]+=a[i][i];
b[5]+=a[n-i-1][n-i-1];
}
if(b[0]==b[1]&&b[1]==b[2]&&b[2]==b[3]&&b[3]==b[4]&&b[4]==b[5])
loop=1;
else
{
c[0]=rand()%n;
c[1]=rand()%n;
c[2]=rand()%n;
c[3]=rand()%n;
j=a[c[0]][c[1]];
a[c[0]][c[1]]=a[c[2]][c[3]];
a[c[2]][c[3]]=j;
}
}
for(i=0;i
{
for(j=0;j
{
printf("%5d",a[i][j]);
}
printf("\n");
}
}
思路是矩阵中两个数随即交换,无数次后或许一不小心就搞好了。。。扯淡到我都不好意思贴出来。。。
ps:魔方阵就是N*N矩阵。元素为1-N*N,使它横竖斜和相等。