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编辑  收藏  举报

导航