Member 13606974 Ответов: 2

Найти количество подмножеств с заданным средним значением в C


даны n уникальных чисел и нужно найти количество подмножеств из них, среднее значение которых будет делиться на другое заданное число.

Что я уже пробовал:

Я искал алгоритм и к сожалению просто нашел
Структуры данных и алгоритм: найти подмножество с заданным средним значением[^]
который написан на языке java, и я не могу его понять.
может ли кто-нибудь показать мне реализацию этого алгоритма на языке Си ? или объясните это еще немного, пожалуйста.

Richard MacCutchan

Попробуйте сами подумать о проблеме. Запишите некоторые цифры и подумайте, как вы могли бы сгруппировать их так, чтобы они были близки к общему среднему значению.

Rick York

Here are some things to consider. I will assume you know to find the average of some numbers and how to check divisibility. If not, you need to figure those out first. The next thing is figuring out how to find a subset. That is probably the trickiest aspect of the problem. The link you posted shows one way and that code can be transformed into C fairly easily. Since you don't understand it then you should try an alternative. Look for code to find permutations and combinations. Those are how a subset is usually determined. There are several ways. The way I sometimes do it is a brute force method and works OK when you have less than 64 elements in the set. I "map" each item to a bit and then increment up to the binary limit of that many items. If a bit is on then that means that item is a member of that particular subset. As an example, let's say there are four items in a set. The count will range from 0 to 15 (two to the fourth power minus one). When the step counter is at five the binary value is 0101 so that means items 2 and 0 are in the subset. This is not a particularly efficient method but it works fairly well with small sets, those with less than 64 items.

Member 13606974

О Боже, спасибо, извините, что я не родной и, возможно, именно поэтому я не могу понять алгоритм в приведенной выше ссылке, поэтому попытался узнать, что это код, который был java, и снова я не был знаком с java, но ваша помощь имеет смысл, я попробую это сделать.

2 Ответов

Рейтинг:
2

OriginalGriff

Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!
И "сделать это самостоятельно" не означает "найти код в интернете" - ссылка, на которую вы ссылаетесь, довольно хорошо объясняет алгоритм, а также представляет код Java для этого. Игнорируйте код и приложите некоторые усилия, чтобы понять, как работает алгоритм.
Или лучше сделайте это вручную на бумаге и запишите, как вы это сделали. Это может стать основой для алгоритма, который вы действительно понимаете.

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


Рейтинг:
2

Patrice T

Цитата:
может ли кто-нибудь показать мне реализацию этого алгоритма на языке Си ? или объясните это еще немного, пожалуйста.

Ты учишься !
Попробуйте найти самый эффективный алгоритм в интернете.
Как ученик, ваша задача состоит в том, чтобы разработать алгоритм, который выполнит эту работу. Именно путем самостоятельного поиска алгоритма вы что-то узнаете.
Лучше найти медленный алгоритм, который вы понимаете, а не алгоритм dast, который вы не понимаете.
Вам нужно найти каждое подмножество и вычислить среднее значение. Возьмите лист бумаги и карандаш и решите задачу вручную. Возьмите небольшой набор значений и запишите все возможные подмножества, а также подумайте о том, как вы можете перечислить их с помощью программы.

Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.

Как программист, ваша задача-создавать алгоритмы это решает конкретные проблемы, и вы не можете полагаться на кого-то другого, чтобы вечно делать это за вас, поэтому есть время, когда вам придется научиться этому. И чем скорее, тем лучше.
Когда вы просто просите решение, это похоже на попытку научиться водить машину, обучая кого-то другого.
Создание алгоритма - это в основном поиск математики и необходимая адаптация к вашей реальной проблеме.