读书人

魔方阵代码有误找不出原因求大神

发布时间: 2012-06-03 16:59:40 作者: rapoo

魔方阵,代码有误,找不出原因,求大神解困
#include "stdafx.h"
#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{int i,j,n,k,count,a[16][16];
int p=1;
while(p==1)
{cout<<"输入(1~15的阶数):";
cin>>n;
if((n>0)&&(n<16)&&(n%2!=0))
p=0;
}


for(i=1;i<=n;i++)//数组初始化
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;

a[1][j]=1;



i=1;

for(k=2;k<=n*n;k++)
{i=i-1;
j=j+1;

if(i<1&&j>3)
{i=i+2;
j=j-1;
a[i][j]=k;
}

else{ if(i<1)i=n;
if(j>3)j=1;
a[i][j]=k;}

if(a[i][j]==0)
a[i][j]=k;
else{i=i+2;j=j+1;a[i][j]=k;}


}

for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cout<<" "<<a[i][j];
cout<<endl;
}
return 0;


}
每一行,每一列与对角线之和相等,例如:
8 1 6
3 5 7
4 9 2

[解决办法]
数组下标从0开始
for(i=1;i<=n;i++)//数组初始化
for(j=1;j<=n;j++)
a[i][j]=0;
这里应该是一处错误
很晚了,没时间看了,先睡觉,有空来看下,给出参考代码,c语言的,改下输出方式就行了

C/C++ code
#include <stdio.h>int main(){    /*         1、定义一个变量,从键盘输入一个奇数        2、定义一个n行n列的二维数组        3、循环,从1到n*n,每次循环放入一个数            1)计算该数要放的位置(下标)                第一次,位置[0][n/2]                以后的位置,行--,列++                如果行越界,行=n-1                如果列越界,列=0                如果行列都越界,行加2,列减1                如果冲突,行加2,列减1                            2)把这个数放入到计算好的位置上        4、打印二维数组    */    int n;    printf("please in put a ji number:");//ji number,嗯,奇数,...    scanf("%d",&n);    if(n%2==0){        printf("input error, exit the program!\n");        return 0;    }    int r[n][n];//如果维数是变量,不能使用int a[n][n]={0}这种方法初始化    int i,j;    for(i=0;i<n;i++){        for(j=0;j<n;j++){            r[i][j]=0;        }            }    //3、循环放入第一个数    int row=0;    int col=n/2;    for(i=1;i<=n*n;i++){        //将数放入指定的位置            r[row][col]=i;        //计算下一个位置        row--;        col++;        //处理越界和冲突        if(row<0&&col<n){row=n-1;}        else if(col>=n&&row>=0){col=0;}        else if(row<0&&col>=n){row+=2;col--;}        else if(r[row][col]!=0){row+=2;col--;}    }    //4\打印结果    for(i=0;i<n;i++){        for(j=0;j<n;j++){            printf("%d\t",r[i][j]);        }        printf("\n");    }    return 0;}
[解决办法]
貌似解决了,恭喜

读书人网 >C++

热点推荐