Вот вы и опишите, чем лучше-то? Какие у вас критерии? Формализуйте - без этого ваша задача не имеет смысла.
чтобы поменьше чисел было в формуле
В формуле итак всего 2 числа: 56734234928564892357783 и 1. Меньше уже никак. Или вам надо, чтобы сами числа были поменьше? Ну тогда 56734234928564892357784 = 1+1+1+1+1+... и так до посинения. Да, их много - но зато сами числа такие маленькие, что меньше уже никак.
Возвращаемся к моему вопросу, что за фурмула вам нужна? Какие свойства у нее должны быть?
Даня , первый тест, наверняка - пример из задания. Вы свою программу на нем запускали-то хотя бы?
Что-то не так сделали, раз ошибки выдает. А при чем тут длина: подумайте, а что, если слово на конце строки. Перед каким же символом заканчивается это слово?
Алексей Дубровин, правильная формула количества чисел тут - n!/(n0!n1!...n9!), где n - длина числа ni - количество цифр i.
Вычитанием вы правильную формулу не получите.
aldexnotproger, Еще добавлю, что не надо для этого знать размер массива во время компиляции. Все, что надо сделать, это выделить память на стеке. Вообще говоря, обычно память под все локальные переменные выделяется в начале функции, но ничего не мешает делать это в середине. Там могут быть сложности с адресацией переменных, и в особо сложных случаях всегда можно выделить память в куче.
Оценки всегда симметричные, как у вас в примере (weight(idX,idY) = weight(idY,idX))?
Как набор весов преобразуется в оценку конкретного расположения элементов? Как понять, что одно расположение лучше другого? Т.е. например, можно разместить id0 с id1 на расстоянии 4, а с id10 на расстоянии 10, а можно id1 на расстоянии 5, а id10 на расстоянии 8. Как понять, что лучше?
Например, можно умножать расстояние между интересующимеся друг другом id-шниками на веса, суммировать это все и минимиировать. Можно домножать на квадраты расстояний, можно веса возводить в степень расстояния, можно давать штраф, если расстояние больше заданного порога... Куча вариантов и все дадут разные решения.
У вас фиксированная функция оценки, или можно взять любую более менее логичную, что дает самый простой алгоритм?
У задачи есть какой-то физический смысл? Может ее возможно свести к чему-то более простому - дайте изначальную задачу.
Davidaa_WoW, Вот функции findMax И findLenght - не работают. Вы туда передаете список ребер из одной вершины. Каким образом они могут найти расстояние в графе, имея лишь список соседей одной вершины - загадка. Что делает findMax я понять не могу, но findLength - выдает индекс заданной вершины в списке. Совершенно бесполезное для вашей задачи действие.
Я вам уже привел ссылки на алгоритмы поиска растояний в графе. Флойд в матрице сразу найдет расстояния от всех вершин до всех, его можно запустить прямо в finddiameter. Дейкстра ищет пути от одной вершины до всех, поэтому его надо вставить в findMax.
ashot_powershot, Наверно, надо выводить несколько символов? Поскольку их может быть сколько угодно, то это надо делать в цикле, да? Может, у вас уже есть цикл в программе, куда это можно добавить?
logan baby, Т.е. вам надо проверить, что строка является корректной записью ip-адреса в десетичной системе?
Нет, такой функции, похоже, нет. Это валидация ввода и она слишком спецефична для каждой задачи.
Можно попробовать из строки прочитать 4 числа, разделенных точками и проверить, что каждое из них от 0 до 255.
Но зато есть унивирсальная форомула.
12345 = 5+10*(4+10*(3+10*(2+10*(1)))
Вместо 10 можно использовать любое число. Раскладываете ваше исходное число в K-ичной системе счисления и потом вычисляете по формуле Горнера.
Все числа в выражении будут до K включительно. Чисел будет порядка Log_K(N) - для 30-значного числа - 2*30