HDU 1015 Safecracker
与其说这是一道搜索题,倒不如说是一道枚举题更加合适,反正就是纯暴力。。。。注意读懂题意
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<string>
#include<algorithm>
using namespace std;
char s[12];
int cmp(const void*a ,const void*b)
{
return *(int*)b-*(int*)a;
}
__int64 target;
int main(void)
{
setbuf(stdout,NULL);
while(scanf("%I64d %s",&target,s)!=EOF)
{
if(target==0 && strlen(s)==3)break;
int v,w,x,y,z;
int len=strlen(s);
int flag=0;
int* num=new int[len];
for(v=0;v<len;v++)
{
num[v]=s[v]-'A'+1;
}
qsort(num,len,sizeof(num[0]),cmp);
for(v=0;v<len;v++)
{
for(w=0;w<len;w++)
{
if(w==v)continue;
for(x=0;x<len;x++)
{
if(x==v||x==w)continue;
for(y=0;y<len;y++)
{
if(y==v||y==w||y==x)continue;
for(z=0;z<len;z++)
{
if(z==v||z==w||z==x||z==y)continue;
if(fabs(num[v]-num[w]*num[w]+pow(num[x],3)-pow(num[y],4)+pow(num[z],5)-target)<0.00001)//这点千万要注意,pow的 原型为double pow( double x, double y );
{
flag=1;
break;
}
}
if(flag)break;
}
if(flag)break;
}
if(flag)break;
}
if(flag)break;
}
if(flag==0)
{
printf("no solution\n");
continue;
}
printf("%c%c%c%c%c\n",num[v]-1+'A',num[w]-1+'A',num[x]-1+'A',num[y]-1+'A',num[z]-1+'A');
}
return 0;
}
posted on 2011-07-21 10:59 lonelycatcher 阅读(208) 评论(0) 编辑 收藏 举报