题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015 题意:给定一个数n,再给一串大写字母字符,A=1,B=2,etc,从中找5个数,要求字典序最大
using namespace std; #include<cstdio> #include<algorithm> #include<cstring> int l,n; //l=strlen(c) int a[6]; //v,w,x,y,z bool flag,f[27]; char c[27]; void Dfs(int k) { int v,w,x,y,z; if (!flag) { if (k==6) { v=c[a[1]]-'A'+1; w=c[a[2]]-'A'+1; x=c[a[3]]-'A'+1; y=c[a[4]]-'A'+1; z=c[a[5]]-'A'+1; if((v-w*w+x*x*x-y*y*y*y+z*z*z*z*z)==n) //公式 { flag=true; for (int i=1;i<=5;i++) cout << c[a[i]]; cout << endl; } } else for (int i=0;i<l;i++) if (f[i]) { a[k]=i; f[i]=false; Dfs(k+1); f[i]=true; } } } bool cmp(char p,char q) { return p>q; } int main() { while(scanf("%d",&n)&&n) { memset(f,1,sizeof(f)); flag=false; cin>>c; l=strlen(c); sort(c,c+l,cmp); Dfs(1); if (!flag) cout<< "no solution"<<endl; } return 0; }