wordpress调用网站最新文章,小红书网站建设目的,律师网站建设培训班,想做企业网站题目#xff1a;
Description - 题目描述 给定若干位十进制数#xff0c;你可以通过选择一个非空子集并以某种顺序构建一个数。剩余元素可以用相同规则构建第二个数。除非构造的数恰好为0#xff0c;否则不能以0打头。
举例来说#xff0c;给定数字0#xff0c;1#x…题目
Description - 题目描述 给定若干位十进制数你可以通过选择一个非空子集并以某种顺序构建一个数。剩余元素可以用相同规则构建第二个数。除非构造的数恰好为0否则不能以0打头。
举例来说给定数字01246与7你可以写出10和2467。当然写法多样210和764204和176等等。最后一对数差的绝对值为28实际上没有其他对拥有更小的差。 Input - 输入 输入第一行的数表示随后测试用例的数量。 对于每组测试用例有一行至少两个不超过10的十进制数字。十进制数字为01…9每行输入中均无重复的数字。数字为升序给出相隔恰好一个空格。 Output - 输出 对于每组测试用例输出一个以上述规则可获得的最小的差的绝对值在一行。 Sample Input - 输入样例 1 0 1 2 4 6 7 Sample Output - 输出样例 28
分析与解答
就是利用next_permutation这个函数生成这组数的全排列然后把全排列分开看每个组成一组数而且a[0]和a[mid]都不为零这是因为两组数的第一个位置上的数数不是零。 只需判断那两组数形成的数的差是不是最小的最后输出那个最小值即可
参考代码
#includebits/stdc.h
using namespace std;
char aa[20];
int a[20];
int cnt, mid, ans;
int main()
{int t;scanf(%d, t);getchar();while(t--){cnt 0;int t;while((t getchar()) ! \n){if(t ! ){aa[cnt] t;cnt;}}int mid cnt/2;ans 1e9;if(cnt 2){printf(%d\n,aa[1]-aa[0]);continue;}for(int i 0; i cnt; i){a[i] aa[i] - 0;}while(a[0] 0)next_permutation(a,acnt);//第一组数的第一个数不能为0do{if(a[mid])//第二组数的第一个数不能为0 {int t10,t20;for(int i0;imid;i)t1t1*10a[i];for(int imid;icnt;i)t2t2*10a[i];ansmin(ans,abs(t1-t2));}}while(next_permutation(a,acnt));printf(%d\n,ans);}
}