hdu 1015 Safecracker 暴力搜索

http://acm.hdu.edu.cn/showproblem.php?pid=1015

题目输入多组数据第组包括:一个整数n和一个字符串,要求从字符串中,选五个字串且满足v - w^2 + x^3 - y^4 + z^5 = n;

c++

#include <stdio.h>
#include<string.h>
#include<math.h>
#include <iostream>
#include <deque>
using namespace std;
double n,q[28],ans;
char p[15];
int num,len;
bool sv()
{
      int i,j,k,l,m;
      for(i=num-1;i>=0;i--)  //呵呵五重循环居然过了。。15ms
            for(j=num-1;j>=0;j--)
            for(k=num-1;k>=0;k--)
            for(l=num-1;l>=0;l--)
            for(m=num-1;m>=0;m--)
            {
              if(i==j||i==k||i==l||i==m||j==k||j==l||j==m||k==l||k==m||l==m)
                continue;
              ans=q[i]-pow(q[j],2)+pow(q[k],3)-pow(q[l],4)+pow(q[m],5);
              if(fabs(ans-n)<1e-8)
              {
               printf("%c%c%c%c%c\n",int(q[i]+64),int(q[j]+64),int(q[k]+64),int(q[l]+64),int(q[m]+64));
               return true;
              }
            }
      return false;
}
main()
{
      int i,j;
      while(scanf("%lf%s",&n,p),n)
      {
            len=strlen(p);j=0;
            for(i=0;i<26;i++)
              q[i]=0;
            for(i=0;i<len;i++)
              q[int(p[i]-65)]=p[i]-64;
            for(i=0;i<26;i++)
              if(q[i])
                q[j++]=q[i];

             num=j;
            if(!sv())
            printf("no solution\n");
          
      }
}

原文地址:https://www.cnblogs.com/zxj015/p/2740259.html