第1个回答 2012-03-08
#include <stdio.h>
#define N 15
int sumrow(int (*a)[5],int n)
{
int sum=0;
for(int i=0;i<5;i++)
sum+=*(*(a+i)+n);
return sum;
}
bool slash(int (*a)[5])
{
int sum1,sum2;
sum1=sum2=0;
for(int i=0;i<5;i++)
{
sum1+=*(*(a+i)+i);
sum2+=*(*(a+i)+4-i);
}
if(sum1==sum2&&sum1==N) //这一点注意一下
return true;
else
return false;
}
int p(int (*a)[5])
{
for(int i=0;i<5;i++)
if(sumrow(a,i)==N&&slash(a)); //这里的问题
else return 0;
for(i=0;i<5;i++,putchar('\n'))
for(int j=0;j<5;j++)
printf("%-2d",a[i][j]);
putchar('\n');
}
void swap(int*a,int*b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
int perm(int (*a)[5],int j,int *b,int k,int m)
{
if(j==5) //
{
p(a);
return 0;
}
if(k==m)
{
for(int i=0;i<=m;i++)
{
*(*(a+j)+i)=b[i];
}
perm(a,j+1,b,0,4);
}
else
{
for(int i1=k;i1<=m;i1++)
{
swap(&b[i1],&b[k]);
perm(a,j,b,k+1,m);
swap(&b[i1],&b[k]);
}
}
}
void main()
{
int b[5]={1,2,3,4,5};
int a[5][5]={0};
perm(a,0,b,0,4);
}