HDU1015Safecracker——水题

来源:互联网 发布:巨人数据库 编辑:程序博客网 时间:2024/06/11 03:44

题意,就是给一个target,然后用后面的字母的编号和给的方程式,计算是否能相等,并输出最大的。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
char a[15];int target;
int fun(int b,int c,int d,int e,int f)
{
if(b==c||b==d||b==e||b==f||c==d||c==e||c==f||d==e||d==f||e==f)
return 0;
//printf("%d %d %d %d %d\n",b,c,d,e,f);
int flag=b-c*c+d*d*d-e*e*e*e+f*f*f*f*f;
//printf("%d\n",flag);
if(flag==target)
return 1;
return 0;
}
int main()
{
while(scanf("%d",&target)!=EOF)
{
scanf("%s",a);
if(target==0&&strcmp(a,"END")==0) break;
int len=strlen(a);
sort(a,a+len);
char s[6];int ean=0;
for(int i=0;i<6;i++)
{
s[i]='\0';
}
for(int i=0;i<len;i++)
{
for(int j=0;j<len;j++)
{
for(int k=0;k<len;k++)
{
for(int l=0;l<len;l++)
{
for(int m=0;m<len;m++)
{
int can=fun(a[i]-'A'+1,a[j]-'A'+1,a[k]-'A'+1,a[l]-'A'+1,a[m]-'A'+1);
if(can==1)
{
ean=1;
s[0]=a[i];s[1]=a[j];s[2]=a[k];s[3]=a[l];s[4]=a[m];
}
}
}
}
}
}
if(ean==1)
printf("%s\n",s);
else
printf("no solution\n");
}
return 0;
}

0 0