/*
先输入未知数个数。
然后输入n*(n+1)的行列式。
*/
#include <stdio.h>
#include <stdlib.h>
int hanglieshi(int a[],int n)
{
int j,s;
if(n==1) s=a[0];
else
{
for(s=0,j=0; j<n; j++)
{
int yuzishi(int x,int b[],int y);
if((j%2)==0)
{
s=s+a[j]*yuzishi(j,a,n);
}
else
{
s=s-a[j]*yuzishi(j,a,n);
}
}
}
return s;
}
int yuzishi(int x,int b[],int y)
{
int m,l,k=(y-1)*(y-1),q,c[k];
for(m=y,l=0; m<y*y; m++,l++)
{
if(m%y==x) m++;
c[l]=b[m];
}
q=hanglieshi(c,y-1);
return q;
}
int main()
{
int n,h;
while(~scanf("%d",&n))
{
int x[n*n+n];
for(h=0; h<n*n+n; h++)
{
scanf("%d",&x[h]);
}
int tmp[n*n],cur=0;
do
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(cur!=j)tmp[i*n+j]=x[i*(n+1)+j];
else tmp[i*n+j]=x[i*(n+1)+n];
puts("");
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
printf("%d%c",tmp[i*n+j],j==n-1&&i!=n-1?'\n':' ');
if(cur==n)printf(" ------D=%d\n",hanglieshi(tmp,n));
else printf(" ------D%d=%d\n",cur+1,hanglieshi(tmp,n));
}while(++cur<=n);
printf("------over-------");
}
return 0;
}
/*
4
1 1 1 1 5
1 2 -1 4 -2
2 -3 -1 -5 -2
3 1 2 11 0
*/
原文:http://blog.csdn.net/u014569598/article/details/42088107