纯粹的暴力解决,用了五个for循环,本来没抱多大希望的,以为会有更好的算法来解决这个问题的,但是竟然能过,真是太出乎我的意料了,有点儿小激动!
这个题是完全的暴力解决,就是从字符串里面找到五个字符他的序号带入公式v - w^2 + x^3 - y^4 + z^5 等于前面的那个数,然后按照字典序输出最后面的那个就行了,拥护暴力!!!
#include
#include
#include
int target(int a,int b,int c,int d,int e,int m)
{
if(a-b*b+c*c*c-d*d*d*d+e*e*e*e*e==m)
return 1;
else return 0;
}
int cmp(const void *a,const void *b)
{
return *(char *)a-*(char *)b;
}
int main()
{
int i,m,a,b,c,d,e,num[100],flag;
char str[100],s[6];
while(scanf("%d %s",&m,str),m!=0||strcmp(str,"END")!=0)
{
flag=0;
qsort(str,strlen(str),sizeof(str[0]),cmp);
for(i=0;str[i];i++)
num[i]=str[i]-'A'+1;
for(a=0;str[a];a++)
for(b=0;str[b];b++)
if(b==a)continue;
else for(c=0;str[c];c++)
if(c==a||c==b)continue;
else for(d=0;str[d];d++)
if(d==a||d==b||d==c)continue;
else for(e=0;str[e];e++)
if(e==a||e==b||e==c||e==d)continue;
else
if(target(num[a],num[b],num[c],num[d],num[e],m))
{// printf("%c%c%c%c%c\n",str[a],str[b],str[c],str[d],str[e]);
s[0]=str[a];s[1]=str[b];s[2]=str[c];s[3]=str[d];s[4]=str[e];s[5]='\0';
flag=1;
}
if(flag==0)printf("no solution\n");
else puts(s);
}
return 0;
}