HDU:1015  Safecracker哈哈,这样…

来源:互联网 发布:mysql 压力测试 编辑:程序博客网 时间:2024/05/21 09:45

纯粹的暴力解决,用了五个for循环,本来没抱多大希望的,以为会有更好的算法来解决这个问题的,但是竟然能过,真是太出乎我的意料了,有点儿小激动!HDU:1015 <wbr> <wbr>Safecracker哈哈,这样竟然也能过!

这个题是完全的暴力解决,就是从字符串里面找到五个字符他的序号带入公式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()
{
    inti,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;
    elsefor(c=0;str[c];c++)
     if(c==a||c==b)continue;
     elsefor(d=0;str[d];d++)
      if(d==a||d==b||d==c)continue;
      elsefor(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("nosolution\n");
    elseputs(s);
 }
    return0;
}

原创粉丝点击