http://acm.hdu.edu.cn/showproblem.php?pid=1015
题解 就是找复合题中给定的表达式的五个字母 搜索 注意回溯
#include<cstdio>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<stdlib.h>
#include<math.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1000000;
char v,w,x,y,z;
int n;
int len=0;
int vis[50];
//string a,ans;
string s;
char ans[50];
char a[50];
void dfs(int k){
if(k==5){
if((a[0]-'A'+1)-pow(a[1]-'A'+1,2)+pow(a[2]-'A'+1,3)-pow(a[3]-'A'+1,4)+pow(a[4]-'A'+1,5)==n){
if(strcmp(a,ans)>0){
strcpy(ans,a);
}
// a[5]='\0';
// cout<<a<<endl;
// string cnt="";
// cnt=cnt+a[0]+a[1]+a[2]+a[3]+a[4]+a[5];
// if(cnt>ans) {
// ans=cnt;
// }
//cout<<ans;
}
return ;
}
for(int i=0;i<len;i++){
if(!vis[i]){
a[k]=s[i];
vis[i]=1;
dfs(k+1);//注意不能k++, 否则回溯后就是k++的值了,而不是之前的值
vis[i]=0;//回溯
}
}
}
int main(){
while(cin>>n>>s){
if(n==0&&s=="END") break;
memset(vis,0,sizeof(vis));
memset(a,'\0',sizeof(a));
memset(ans,'\0',sizeof(ans));
len=s.size();
// a="";
// ans="";
dfs(0);//字母个数
int ll=strlen(ans);
if(ll==0){
cout<<"no solution"<<endl;
}
else{
for(int i=0;i<ll;i++){
cout<<ans[i];
}
cout<<endl;
//cout<<ans<<endl;
}
}
}
///////////////////遇到个问题
字符串a 如果那样赋值后,尽然输不出东西
#include<cstdio>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<stdlib.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1000000;
string a,b,c;
int main(){
a="";
b="";
c="";
a[0]='A';
a[1]='B';
a[2]='C';
a[3]='\0';
b=a;
c=c+a[0]+a[1]+a[2];
cout<<a.size()<<endl;
cout<<ans<<endl;
// cout<<c.size();
// cout<<b<<endl;
// cout<<c<<endl;
}