dfs,暴力也可以
#include <iostream> #include<stdio.h> #include<string.h> #include <algorithm> using namespace std; int n,num[13],flag,sum,vis[13], so[5],len; bool cmp(int a,int b) { return a>b; } int f(int v,int w,int x,int y,int z) { return v-w*w+x*x*x-y*y*y*y+z*z*z*z*z; } void dfs(int d) { //if(flag)return; if(d==5) { if(f(so[0],so[1],so[2],so[3],so[4])==n) { flag=1; return; } } else { for(int i=0;i<len;i++) { if(vis[i])continue; so[d]=num[i]; vis[i]=1; dfs(d+1); if(flag)return; vis[i]=0; } } } int main() { //freopen("t.txt","r",stdin); char str[14]; while(1) { scanf("%d",&n); scanf("%s",str); flag=0; sum=0; memset(vis,0,sizeof(vis)); if(n==0&&strcmp(str,"END")==0)break; else { len=strlen(str); for(int i=0;i<len;i++) { num[i]=str[i]-'A'+1; } sort(num,num+len,cmp); dfs(0); if(flag) { for(int i=0;i<5;i++)printf("%c",'A'+so[i]-1); } else printf("no solution"); printf("\n"); } } return 0; }