算法竞赛入门经典第七章暴力求解法7.1节第一题

"算法竞赛入门经典"一书中的某题如下


输入正整数n,按从小到大的顺序输出所有形如 abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2<=n<=79。

样例输入:
62
样例输出:
79546/01283=62

94736/01528=62


直接的解决方法就是对除数进行DFS暴力搜索,直到找到符合条件的为止。


#include
using namespace std;

int vis[10]; //n标识位为1表示n是在除数中,n标识为2表示n在被除数中
int a[5];
int target;

void dfs(int a[], int cur)
{
    if(cur == 5){
	int t = 0,mul = 1;
	for(int i=4;i>=0;i--){
	    t += a[i] * mul;
	    mul *= 10;
	}

	int sum = t * target;
	while(sum){
	    int tmp = sum % 10;
	    sum = sum / 10;
	    if(vis[tmp] != 0){
		for(int j=0;j<10;j++)
		    if(vis[j] == 2) vis[j] = 0;
		return;
	    }
	    vis[tmp] = 2;
	}

	cnt ++;
	cout<


你可能感兴趣的:(Data,Structures,&&,Algorithm)