算法小作业
用递归法实现全排列,并用全排列求解下题:
把1到9 这九个数字填入上式中,数字不得重复,使等式成立,统计满足所有条件的所有解。
#include<stdio.h>
int s=0; //统计解的个数
int a[] = {1,2,3,4,5,6,7,8,9};
int p (int a[],int c,int d) //a数组存放排列的数1~9,c代表第几个数,d数组的长度9。
{
int i,temp;
long m1,m2,m3;//分母
if( c==d && a[0]<a[3] )//等式左侧两个分数交换次序只算一个解,为了避免重复,设a[0]<a[3]
{
m1=a[1]*10+a[2];
m2=a[4]*10+a[5];
m3=a[7]*10+a[8];
if(a[0]*m2*m3+a[3]*m1*m3==a[6]*m1*m2)//判断等式
{
s++;
printf("(%2d)", s);
printf("%d/%ld+%d/",a[0],m1,a[3]);
printf("%ld=%d/%ld ",m2,a[6],m3);
if(s%2==0) printf("\n");//格式一行两个解
}
}
for( i=c;i<d;i++ )//i遍历第c~d个数,每次以a[i]所存的数值为打头的数
{
temp=a[c];
a