暴力枚举
参考:https://blog.csdn.net/Scythe666/article/details/13005067
//枚举
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
char str[15];//输入的字符串
int num[15];//上面字符串对应的数字
void Trans() {
int i;
for (i = 0; i < strlen(str); i++)
num[i] = str[i] - 'A' + 1;
}
//暴力枚举
void force(int len, int target) {
int i, j, k, l, m;
for(i=len-1;i>=0;i--)
for (j = len - 1; j >= 0; j--) {
if (j == i) continue;
for (k = len - 1; k >= 0; k--) {
if (k == i || k == j) continue;
for (l = len - 1; l >= 0; l--) {
if (l == i || l == j || l==k) continue;
for (m = len - 1; m >= 0; m--) {
if (m == i || m == j || m == k || m == l) continue;
else if (num[i] - pow(num[j], 2) + pow(num[k], 3) - pow(num[l], 4) + pow(num[m], 5) == target) {
printf("%c%c%c%c%c\n", num[i] - 1 + 'A', num[j] - 1 + 'A',
num[k] - 1 + 'A', num[l] - 1 + 'A', num[m] - 1 + 'A');
return;
}
}
}
}
}
printf("no solution\n");
}
int main() {
int target;
while (cin >> target >> str && target) {
int len = strlen(str);
Trans();
sort(num, num + len);//先排序,一定是最大字典序
force(len, target);
}
return 0;
}