排列组合
hdu 题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=1015
#include<iostream> #include<string> #include<cmath> using namespace std; void quickSort(int start,int end,string &s){ //快排 if(start<end){ int l=start,r=end; char ch=s[start]; while(l<r){ while(s[r]>ch&&l<r) r--; if(l<r){ s[l++]=s[r]; } while(s[l]<ch&&l<r) l++; if(l<r){ s[r--]=s[l]; } } s[l]=ch; quickSort(start,l-1,s); quickSort(l+1,end,s); } } int main(){ string s; int target; while(cin>>target>>s){ if(target==0&&s=="END"){ break; } else{ quickSort(0,s.length()-1,s); char temp; string s1; for(int a=0;a<s.length();a++){ //排列组合 temp=s[0]; s[0]=s[a]; s[a]=temp; for(int b=1;b<s.length();b++){ temp=s[1]; s[1]=s[b]; s[b]=temp; for(int c=2;c<s.length();c++){ temp=s[2]; s[2]=s[c]; s[c]=temp; for(int d=3;d<s.length();d++){ temp=s[3]; s[3]=s[d]; s[d]=temp; for(int e=4;e<s.length();e++){ if(((int)s[0]-64) - (int)pow((int)s[1]-64,2) + (int)pow((int)s[2]-64,3) - (int)pow((int)s[3]-64,4) + (int)pow((int)s[e]-64,5)==target){ s1=s.substr(0,4)+s[e]; } } temp=s[3]; s[3]=s[d]; s[d]=temp; } temp=s[2]; s[2]=s[c]; s[c]=temp; } temp=s[1]; s[1]=s[b]; s[b]=temp; } } if(s1==""){ cout<<"no solution"<<endl; } else cout<<s1<<endl; } } }