2718专题

POJ 2718 Smallest Difference(暴力,全排列,next_permutation)

题目链接:http://poj.org/problem?id=2718 题意:给出2-10个数(个位数0-9),用这几个数组成两个数(除0之外,首位不能为0),求这两个数的最小值。 题解:两个数差值最小首先保证位数差值最小,所以对这几个数从中间分开,组成两个数,求出差值。用到STL中的next_permutation()函数。 代码: #include<iostream>#inclu

[YTU]_2718 (求最高同学位置)

Description 设一维数组存放了n(<100)名同学的身高,编写函数求身高最高同学的位置,如果结果有多个,需要输出所有人的位置。 部分代码已给定如下,只需要提交缺失的代码。 #include <iostream> using namespace std; int main() {     int getHeight(float height[],int n,float result[

poj 2718(搜索+剪枝)C语言实现

题意:给你一串数字(不重复,且数字的个数在2-10之间),组成2个数字,求这2个数字差的绝对值的最小值,(其中不可以把0放在第一位比如一串数字0,2,4,5,不可以组成02,45这2个数。但可以组成20,45) 思路:递归全排列。然后前后分成2部分,计算前后2部分大小和差值,再和min比较,如果小于,更新min的值。  剪枝(c++好像不用剪枝,直接用排列函数,暴力解就可以了,但是C不行)

poj 2718

首先可以想到,这两个数必定是用各一半数量的数字组成的数,如给出6个数,把这6个数分为两组,每组3个,这样组成的数字的差必定比其他方式小。接下来的任务就是穷举所有可能出现的组合,并求出最小差。在这里可以使用STL的next_permutation函数来求给定这组数字的所有排列,并将其分为两组组成数字,然后记录最小差。需要注意第一个数位不能为0。 #include <iostream>#inc