Я хочу, чтобы сгенерировать случайный массив символов 20 символов со следующим свойствомДетерминированный способ генерировать массив символов
SUM(a[i] * (i+1)) = GOAL
я в настоящее время с помощью такой грубой силы подход, как показано ниже, но это занимает слишком много времени:
int LENGTH = 20;
int GOAL = 14895;
char allowed_chars[] = {48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90};
char finalarray[LENGTH];
srand(time(NULL));
while(1)
{
int sum = 0;
int i = 0;
for (i = 0; i < LENGTH; i++)
{
finalarray[i] = allowed_chars[rand() % (strlen(allowed_chars) + 1)];
sum += (int)finalarray[i] * (i+1);
}
if (sum == GOAL)
{
printf("Found: %s", finalarray);
break;
}
}
это порождает выход, но есть ли детерминированный способ сделать это без грубой силы или ударить и попробовать?
сначала решить, какой язык, с или с ++ –
C или C++, благодаря – user2370419
Что вы имеете в виду? Что заставляет вас не довольствоваться вашим кодом? – gsamaras