题意:给你一串数字(不重复,且数字的个数在2-10之间),组成2个数字,求这2个数字差的绝对值的最小值,(其中不可以把0放在第一位比如一串数字0,2,4,5,不可以组成02,45这2个数。但可以组成20,45)
思路:递归全排列。然后前后分成2部分,计算前后2部分大小和差值,再和min比较,如果小于,更新min的值。
剪枝(c++好像不用剪枝,直接用排列函数,暴力解就可以了,但是C不行)
#include<stdio.h>
#include<math.h>
int p[6]={1,10,100,1000,10000,100000};
int vis[10];
int num[10],s[10];
int k,min=10000000;
void dfs(int co)
{
int i,j,a=0,b=0,c=0;
if(co==k)
{
for(j=0;j<k/2;j++) //第一部分数是从0到k/2 第2部分数是从k/2到k (k代表数字的个数)
a=a*10+s[j];
for(j=k/2;j<k;j++)
&