题意:给你一串数字(不重复,且数字的个数在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++)
&

该博客主要介绍了如何使用C语言解决POJ 2718问题,即给定一串不重复数字,找到两数组合使它们的差的绝对值最小。博主通过递归全排列和剪枝策略实现,特别指出C++中可直接暴力解,而C语言需要剪枝优化。代码中展示了详细的DFS实现过程。
C语言实现&spm=1001.2101.3001.5002&articleId=53966342&d=1&t=3&u=1060c164b16646abb9198007c14d0af4)

被折叠的 条评论
为什么被折叠?



