首页 > 代码库 > HDU-1015-Safecracker

HDU-1015-Safecracker

题目链接

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

 

题意

给一个数n 和 一串字符 str  ,           ( A B  C D E F G .......  X Y Z   代表  1 2 3 ..... 26)

从 字符串中选 5个字符  如果  v - w^2 + x^3 - y^4 + z^5 = n  输出 字符,有多个 输出 字典迅速最大的那组

 

对于这题,可直接5 个for循环 暴力出来

代码

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(const int &a,const int &b)
{
return a>b;
}

int main(void)
{
int k,n;
int i1,i2,i3,i4,i5;
int v,w,x,y,z,ok;
char str[20];
while(scanf("%d%s",&n,str)!=EOF)
{
ok=0;
if(n==0&&strcmp(str,"END")==0)
break;
k=strlen(str);
sort(str,str+k,cmp);
for(i1=0;i1<k;i1++)
{
for(i2=0;i2<k;i2++)
{
if(i1==i2)
continue;
for(i3=0;i3<k;i3++)
{
if(i3==i1||i3==i2)
continue;
for(i4=0;i4<k;i4++)
{
if(i4==i1||i4==i2||i4==i3)
continue;
for(i5=0;i5<k;i5++)
{
if(i5==i1||i5==i2||i5==i3||i5==i4)
continue;
v=str[i1]-64; w=str[i2]-64; x=str[i3]-64; y=str[i4]-64; z=str[i5]-64;
if(v-w*w+x*x*x-y*y*y*y+z*z*z*z*z==n)
{
printf("%c%c%c%c%c\n",str[i1],str[i2],str[i3],str[i4],str[i5]);
ok=1;
break;
}
}
if(ok)
break;
}
if(ok)
break;
}
if(ok)
break;
}
if(ok)
break;
}
if(ok==0)
printf("no solution\n");
}
return 0;
}

HDU-1015-Safecracker