编写一个实验程序,求出a、b、c、d、e,满足ab-cd+e=1方程,其中所有变量的取值为1~5并且均不相同。
分析:采用回溯法,以找到变量的个数为终结条件,然后根据判断是否满足方程组输出。for循环五个数依次对应abcde,然后用vis[i]数组判断当前i的值是否被使用,没使用就可以用。使用后就不能用。
注:其实用C++中自带的全排列函数next_permutation()函数更好的做出结果。老师规定用回溯法。。。。。
代码:
#include<iostream>
using namespace std;
#include<algorithm>
#include<cstring>
#include<cstdio>
int vis[6]={0};
void f(int a[],int k,int n)
{
if(k==n)
{
if((a[0]*10)+a[1]-(a[2]*10+a[3])+a[4]==1)
{
printf("%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4]);
}
return;
}
for(int i=1;i<=n;i++)
{
if(vis [i]==0)
{
vis[i]=1;
a[k]=i;
f(a,k+1,n);
vis[i]=0;
}
}
}
int main()
{
int a[6];
f(a,0,5);
return 0;
}