2012-06-02 2 views
0

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

Прототип функции выглядит следующим образом:

int min_number_of_stamps (
const int* array, /* input array of sorted stamp values */ 
size_t array_size, /* number of elements in array */ 
int request /* desired value to of stamps */ 
); 

Функция возвращает минимальное количество марок для данного значения. Например, если массив был [90,30,24,15,12,10,5,3,2,1], а запрос был 32, выход должен быть 2, one 30 cent stamp и one 2 cent stamp.

Может ли кто-нибудь помочь мне решить этот вопрос или дать мне некоторый намек на это?

+1

Вы начинаете с первым значением отметки (самым высоким) и продолжайте идти, пока вы можете найдите значение штампа меньше, чем запрос. Затем вы просто добавляете эту марку в массив, вычитаете из запроса и повторяете до тех пор, пока запрос не будет равен нулю. –

+1

Я бы предложил придумать общий алгоритм для решения проблемы сначала, * затем * беспокоясь о том, как программировать его на Java. Поскольку вопросы читаются сейчас, это звучит так, будто вы в основном хотите, чтобы вся работа была выполнена для вас. –

+0

@ RiverC Скажите, что ваши наименования [90, 80, 70, 1]. И ваш запрос 140. Подойдя к тому, что вы предложили, я получаю 90 + (50 x 1). Я ожидал бы получить 70 + 70. –

ответ

4

У вас наверняка начался хороший старт: вам понадобится массив.

Два отличия от C/C++:

1) Вам не нужен "ARRAY_SIZE": Java массивы "знают", как долго они

2) Вы не можете объявить «Const ИНТ * массив ". Вместо этого вы должны указать «int [] array» ... затем инициализировать его.

Вот хорошая ссылка:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

PS:

Вот скелет для класса Java вы могли бы рассмотреть:

public class StampVendingMachine { 

    public static void main (String[] args) { 
    // Your program starts in this method... 
    } 

    public int minStamps (int num_stamps) { 
    // This is where you can compute how many stamps 
    } 

    // This can be your "lookup table" 
    private int[] min_number_of_stamps; 
} 

PPS:

одна ссылка:

Maximum value of postage stamps on an envelope

+0

Большое вам спасибо за ответ! Это действительно полезно и имеет смысл для меня. Думаю, я направляюсь в правильном направлении. –

1

Поскольку это домашнее задание:

Я новый новичок в Java и интересно, если кто-то может помочь мне решить этот вопрос

Если вы имеете в виду ... «обеспечить я с решением "... это явно неуместно, а не в ваших долгосрочных интересах.

... или дать мне некоторый намек на это.

OK.

  1. С алгоритмической стороны подумайте, как вы это сделаете, скажите 6-летнему, чтобы сделать это ... предполагая, что он/она не понимали, как размножаться и делиться. Комментарий RiverC - хорошее место для начала.
  2. Вам не кажется, есть понимание основы языка Java:
    • Хотя синтаксис во многом подобного, Java очень отличается от C или C++. Не ожидайте, что ваши знания на C/C++ переносятся на Java. Например:
      • Java не имеет функций, он имеет методы.
      • Объявление массива Java и инициализация Синтаксис отличается от C/C++.
      • Java-массивы семантически отличаются от C/C++ в некоторых важных аспектах.
    • Для начала вам нужно прочитать первые несколько глав хорошего текстового учебника Java (например, рекомендованного вашим преподавателем Java) или прочитать учебник Oracle Java. Если вы пропустите этот шаг, я предскажу, что вы будете бороться. (А если у вас нет времени, потому что ваш срок присваивания надвигающегося, это в значительной степени уверенность ...)
Смежные вопросы