首页 > 代码库 > 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