⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pku1248.cpp

📁 这是ACM 方面的资料 是PKU的 北京大学的出来的
💻 CPP
字号:
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

bool cp(char a, char b)
{
	return a > b;
}

int ToNum(char x)
{
	return x - 'A' + 1;
}

char ToChar(int x)
{
	return x + 'A' - 1;
}

char s[50];
int val[27][6];
int ls, k;
bool visit[27], found;
int ans[5];

void pre()
{
	int i, j;
	for (i = 0; i < 27; i++)
	{
		val[i][0] = -1;
	}
	for (i = 0; i < 27; i++)
	{
		for (j = 1; j < 6; j++)
		{
			val[i][j] = val[i][j - 1] * i * (-1);
		}
	}
}

bool Test()
{
	int i, res;
	for (i = 0, res = 0; i < 5; i++)
	{
		res += val[ans[i]][i + 1];
	}
	if (res == k)
	{
		for (i = 0; i < 5; i++)printf("%c", ToChar(ans[i]));
		printf("\n");
	}
	return res == k;
}

void search(int dep)
{
	int i;
	if (found)
	{
		return;
	}
	if (dep == 5)
	{
		if (Test())
		{
			found = 1;
		}
		return;
	}
	for (i = 0; i < ls; i++)
	{
		if (visit[i] == 0)
		{
			visit[i] = 1;
			ans[dep] = ToNum(s[i]);
			search(dep + 1);
			visit[i] = 0;
		}
	}
}

int main()
{
	pre();
	while (scanf("%d%s", &k, s) != -1 && k != 0)
	{
		ls = strlen(s);
		sort(s, s + ls, cp);
		found = 0;
		memset(visit, 0, sizeof(visit));
		search(0);
		if (!found)
		{
			printf("no solution\n");
		}
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -