HDU1015Safecracker——水题

本文介绍了一种通过组合给定字符来求解特定数学公式的算法实现。该算法使用递归回溯的方法尝试不同的字符组合,以寻找符合预设目标值的公式解。通过排序输入字符并检查组合的有效性来提高求解效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意,就是给一个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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值