有用六重循环的,无敌了。。。
以下代码采用回溯法。
- #include <cstdio>
- #include <string.h>
- #include <string>
- #include <algorithm>
- using namespace std;
- bool visit[30] ,judge;
- int ans[6] ,N[26] ,total;
- long long target ,sum;
- void set(char *a)
- {
- int i ,len;
- for(i = 0 ;i < 30 ;i++)
- visit[i] = false;
- judge = false;
- len = strlen(a);
- sum = 0 ;
- total = -1;
- for(i = 0 ;i < len ;i++)
- N[++total] = (int)a[i] - 64;
- sort(N ,N + total);
- }
- void dfs(int n)
- {
- int i ,j;
- long num;
- if(n == 6)
- {
- if(target == sum)
- judge = true;
- return ;
- }
- for(i = total ;i >= 0 ;i--)
- {
- if(visit[i] == false)
- {
- num = -1;
- for(j = 1 ;j <= n ;j++)
- num = num * N[i] * (-1);
- sum = sum + num;
- visit[i] = true;
- ans[n] = N[i];
- dfs(n + 1);
- if(judge == true) return ;
- sum = sum - num;
- visit[i] = false;
- }
- }
- }
- int main()
- {
- char str[13];
- while(scanf("%lld %s",&target ,str))
- {
- string s = str;
- if(target == 0 && s == "END") break;
- else
- {
- set(str);
- dfs(1);
- if(judge == true)
- for(int i = 1 ;i <= 5 ;i++)
- printf("%c",(char)(ans[i] + 64));
- else
- printf("no solution");
- printf("\n");
- }
- }
- }
#include <cstdio>
#include <string.h>
#include <string>
#include <algorithm>
using namespace std;
bool visit[30] ,judge;
int ans[6] ,N[26] ,total;
long long target ,sum;
void set(char *a)
{
int i ,len;
for(i = 0 ;i < 30 ;i++)
visit[i] = false;
judge = false;
len = strlen(a);
sum = 0 ;
total = -1;
for(i = 0 ;i < len ;i++)
N[++total] = (int)a[i] - 64;
sort(N ,N + total);
}
void dfs(int n)
{
int i ,j;
long num;
if(n == 6)
{
if(target == sum)
judge = true;
return ;
}
for(i = total ;i >= 0 ;i--)
{
if(visit[i] == false)
{
num = -1;
for(j = 1 ;j <= n ;j++)
num = num * N[i] * (-1);
sum = sum + num;
visit[i] = true;
ans[n] = N[i];
dfs(n + 1);
if(judge == true) return ;
sum = sum - num;
visit[i] = false;
}
}
}
int main()
{
char str[13];
while(scanf("%lld %s",&target ,str))
{
string s = str;
if(target == 0 && s == "END") break;
else
{
set(str);
dfs(1);
if(judge == true)
for(int i = 1 ;i <= 5 ;i++)
printf("%c",(char)(ans[i] + 64));
else
printf("no solution");
printf("\n");
}
}
}