网站建设制作模板网站怎么做,中国刚刚发生的新闻,便宜的网站设计企业,昆明360网站制作题意#xff1a; 给你0到9之间的数#xff0c;然后让你搞成两个数#xff0c;求一个最小差异值#xff08;被组合的数不允许出现前导0#xff09; 思路#xff1a;最小差异那么肯定是有一个整数长n/2,另一个长n-n/2#xff0c;搜一下就好了。 code#xff1a; #inclu… 题意 给你0到9之间的数然后让你搞成两个数求一个最小差异值被组合的数不允许出现前导0 思路最小差异那么肯定是有一个整数长n/2,另一个长n-n/2搜一下就好了。 code #includecstdio
#includestring.h
#includeiostream
#includealgorithm
using namespace std;next_permutation(first,end);
按照字典序列搞出比他下面的那些排列/*
int main()
{int a[3];for(int i0;i3;i)cina[i];while(next_permutation(a,a3)){for(int i0;i3;i){printf(%d,a[i]);}puts();}
}
*/#define INF 0X3f3f3f3f
int a[15];
bool vis[15];
int b[15];
int n;
int ans;
char s[1010];//另一半直接搞全排列然后直接判断取小就行了
void solve(int aa)
{int len0;int bb;for(int i0; in; i){if(!vis[i]){b[len]a[i];}}bb0;for(int i0; ilen; i)bbbb*10b[i];sort(b,blen);if(len1||b[0]!0)ansmin(abs(bb-aa),ans);while(next_permutation(b,blen)){bb0;for(int i0; ilen; i)bbbb*10b[i];if(len1||b[0]!0)ansmin(abs(bb-aa),ans);}
}//先搜出一个数
void DFS(int k,int res)
{if(kn/2){solve(res);return;}for(int i0; in; i){if(!vis[i]){if(a[i]0k0n3)continue;vis[i]1;DFS(k1,res*10a[i]);vis[i]0;}}
}
//两个输入方式
void made1()
{gets(s);n0;int lenstrlen(s);for(int i0; ilen; i){if(s[i] )continue;else{a[n]s[i]-0;//printf(%d ,a[n-1]);}}
}
void made2()
{n0;char ch;while((chgetchar())!\n){if(ch )continue;a[n]ch-0;}
}int main()
{int T;scanf(%d,T);getchar();while(T--){//made1();made2();memset(vis,0,sizeof(vis));ansINF;DFS(0,0);printf(%d\n,ans);}return 0;
} 转载于:https://www.cnblogs.com/keyboarder-zsq/p/5934504.html