Dynamic Programming Subset Sum C# implementation


0

Здравейте колеги,

Опитвам се да имплементирам следния код от C++ на C#, но срещам определена трудност. Нямам си идея как се инициализират масиви в C++ и как се използват. Изумен съм, че масиивите никъде не са инициализирани, а това би трябвало да е работещ код!  Какво всъщност е offset в случая и как изведнъж се появява в квадратните скоби на масива без никъде преди това да е декларирано, нито инициализирано?

Това всъщност е код от лекцията в Алго академията от архивираните курсове, на слайд 23 от презентацията.

Текущото ниво на кода ми е ето това:




Отговори



1

OFFSET е дефинирана константа, която явно липсва в слайдовете. Което ме навежда на мисълта, че масивите са декларирани и инициализирани, но самият код липва.

Ето това е целият код: http://pastebin.com/N4VGcBTc

  1. #include <iostream> - това включва библиотека
  2.  
  3. #define OFFSET 10000 - дефинира константа
  4.  
  5. int possible[OFFSET + OFFSET];
  6. // В C# => int[] possible = new int[OFFSET + OFFSET]
  7. // В C++ => int possible[OFFSET + OFFSET]

от martin.nikolov (4535 точки)


0
Благодаря много! Аз си мислех, че в другия език по някаква си причина не са необходими деклариране и инициализиране. И дори не се сетих да търся демо за този код, откъдето ти вероятно го имаш целия.

от ttitto (1950 точки)

0
На тази страница би трябвало да са качени всички решения, лекции, презентации и т.н.: http://academy.telerik.com/algoacademy/home само трябва да знаеш през кой сезон е дадена задачата.

от martin.nikolov (4535 точки)


0

http://pastebin.com/hk2czD2G

Ето това можах да направя, за да превърна C++, в C#.

Обаче нещото не работи. Не мога да разбера дали имплементацията е грешна или алгоритъмът в C++ е грешен.

Тествам го с 5 числа: 3, -2, 1,1,8

резултат:
The sum 5 is impossible.

All possible sums:
 -2 -1 0 1 2 3 4 6 7 8 9 10 11 12
 

както виждате 5 е възможна сума (3+1+1), а най-голямата възможна сума не е 12, а е 13 (3+1+1+8)

Дали някой би могъл да ми помогне да открием грешката!?


от ttitto (1950 точки)


0
разбрах си грешката. Дори са две - имах сбъркана променлива за индекс на едно място. Освен това изчислението за минималната и максималната граница на сумите е грешно и оттам дава IndexOutOfRangeException

от ttitto (1950 точки)