您的位置:首页 > Web前端

HDU:1015  Safecracker哈哈,这样…

2012-12-05 17:06 417 查看
纯粹的暴力解决,用了五个for循环,本来没抱多大希望的,以为会有更好的算法来解决这个问题的,但是竟然能过,真是太出乎我的意料了,有点儿小激动!


这个题是完全的暴力解决,就是从字符串里面找到五个字符他的序号带入公式v - w^2 + x^3 - y^4 + z^5
等于前面的那个数,然后按照字典序输出最后面的那个就行了,拥护暴力!!!

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: