Реакторчане, нужна помощь. / it :: cs50 :: пидоры помогите (реактор помоги)

пидоры помогите it cs50 

Реакторчане, нужна помощь.

Прохожу курс cs50. После каждой лекции они дают пару задачек, которые надо решить. Я застрял на задачке Tideman, на Си.


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

В самой задачке надо прописать 6 функций, можно добавлять дополнительные функции, но менять main нельзя. Я написал все, но проверку через сайт прошли только 5. Последняя функция проходит в моих собственных тестах, а на сайте не проходит.

У них, кстати, есть своё собственное IDE, довольно удобное, надо только через аккаунт GitHub'а зайти.

Саму функцию скину в комменты, чтобы пост не удлинять.

Ну и как же без купона.


Ах да, я писал в личку ребятам с курса, писал в дискорд - никто мне толком не ответил. В интернете ничего по задаче не нашел.

пидоры, помогите
-Ü
05
С
<,пидоры помогите,реактор помоги,it,cs50




Подробнее
пидоры, помогите -Ü 05 С <
пидоры помогите,реактор помоги,it,cs50
Еще на тему
Развернуть
Последняя функция называется print_winner и единственное, что она должна делать - выводить на экран имя победителя.
Для этого она должна использовать глобальную переменную candidate_count и глобальный двумерный булевый массив locked, который представляет из себя сам график.
Например: locked[2][4] = true; означает, что кандидата "2" предпочитают кандидату "4", а locked[0][2] = true; означает, что нулевого кандидата предпочитают перед вторым.
Суть функции - найти источник графика, то есть кандидата, на которого никто не указывает. Я написал функцию следующим образом:
Бля, хз, как сюда код вставить. скринить видимо придётся...
Если тебе тупо нужно найти source графа (и не париться о том, единственный он или нет, например), там вряд ли нужно такое количества кода. Попробуй загуглить "find source of connected directed graph from adjacency matrix" или что-то а этом духе. По идее тебе должно хватить одного вложенного цикла: пробегаешься внешним циклом по всем кандидатам, внутренним циклом для каждого кандидата пробегаешься в другом измерении, типа чтобы во внешнем цикле у тебя менялся второй индекс (тот, на кого указывает грань), а во внутреннем цикле менялся первый индекс (тот, от кого идёт грань). Просто каждый раз во внутреннем цикле суммируешь элементы массива locked, типа делаешь переменную под сумму, ставишь ее перед внутренним циклом на 0, потом после завершения внутреннего цикла проверяешь. Если все ещё 0, на этого кандидата ничего не указывает, и сразу бахаешь return.

Оговорюсь, что саму задачу по ссылке не дочитал, т.к. многабукаф
У меня в принципе практически тоже самое, только вместо переменной я использую дополнительный массив, в который записываю полученные от перебора false из массива locked и если получаю все false, то вывожу этого кандидата. И этот вариант чекер не принимает.
Твой вариант чуть проще попробую его, отпишусь.
Неа, опять возвращает ошибку. Но всё равно спасибо.
Может еще какие варианты будут?
CS50 IDE File Edit Find View Go ^ ^ tideman.c x w.c X ‘pseudocode.txt • + 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 // Print the winner of the election void print_winner(void) { // T0D0 for (int j = 0; j <
Если я правильно понял условие первого теста, то там ошибка скорее всего где-то не в этой функции, например ты неправильно для этого случая (один уделал всех) заполняешь матрицу locked.

Условие второго теста я не понял, т.к. не вник пока, как там у них происходит tie.
Чекер проверяет все функции, функцию на корректное заполнение графа locked тоже проверяет и пишет, что ошибок нет, все в порядке. Причем, судя по дискорду у многих возникает проблема на этой последней функции, то есть, видимо, чекер криво написан. Завтра напишу чуваку, который писал чекер, если мне за ночь там никто не ответит.
Не знаю, как чекер этот работает, но если с \n не проканает, то я тогда хз.

Если написавший тестер в США, пиши хоть сейчас, должен быть день по всей стране =)
В том то и дело, я тоже не знаю как работает чекер, он не возвращает логов. Только правильно/неправильно. Если бы я знал, то все было бы гораздо проще...
я как професеанальный быдлокодер вмазал бы linq и System.Diagnostics.Trace.WriteLine
Это не Шарп, умник =)))
действительно ) папку с сынком спутал - похожи суки ...
Еще что в голову пришло - попробуй добавить \n в принт, типа так: printf("%d\n", j);. Просто чем черт не шутит, вдруг буферизация принт твой съедает...
К сожалению сегодня уже всё, завтра буду пробовать, но спасибо за совет!
Увы, с \n не вышло, но идея была хорошая.
А, я, кажись, понял, что ты не так сделал.

Complete the print_winner function.
The function should print out the name of the candidate who is the source of the graph. You may assume there will not be more than one source

Ты имя должен принтить, а не номер.
Это у меня в тестовой функции номер указан, а в самой - имя кандидата.
Проблему решил.
Ты был прав, там не хватало \n.
Тупая IDE после добавления в printf \n не сохраняла изменения (похоже не видела их) и отсылала в чекер версию без \n. И чекер опять возвращал ошибку. Пришлось добавить комментарий вместе с добавлением \n.
Пиздец как это тупо, я из-за этого говна 2 дня голову ломал. Охуеть.
Ты с самого начала был прав. Спасибо тебе!
Не за что, рад помочь =) Удачи!
вынеси Х и проверку Х на ноль на уровень выше, сейчас ты чекаешь для каждой строки в массиве, а надо глобально, если я правильно понял.
Я проверяю не строку, а столбец. Проверка идёт по вертикали сверху вниз, а потом переходить дальше. Это нужно, чтобы найти в графе того кандидата, у которого все пересекающиеся = false. Это будет значит, что нет ни одного кандидата более предпочтительного.
Я не очень понял запись данных в массив locked, но меня смутило, что мы проходим по столбцам, а не по строкам как обычно происходит. Тут не может быть ошибки, банально перепутались i и j?
Ага, специально идём по столбцам, я выше написал.
Можно ссылку?
Я нашел только этот https://online-learning.harvard.edu/course/classics-computer-science?delta=0
И знаешь, он не настолько уж лучше. Самый главный минус его - 2840 баксов.
Спасибо, я как домохозяйка предпочту пройти сначала простой и бесплатный курс, чтобы хотя бы понять, что такое программирование и что мне в нём делать. А не башлять сразу 2840 баксов. Заебись советчик.
все внимательно прочитал. удачи тебе.
Спасибо и на том
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
КУПОН
НА 1 помощь КУПОН
НА 1 помощь