Member 13689794 Ответов: 2

Есть ли вообще возможность уменьшить количество строк для этого кода?


Существует машина Coke® , которая имеет диетическую кока-колу® в селекционных слотах B1-B5, и каждый слот (колонка) вмещает 10 бутылок.

Когда я покупаю диетическую колу®, я всегда выбираю B1. Я не всегда получаю диетическую колу® от B1. Почему? В этой машине закодирован алгоритм, который будет выдавать диетическую колу® и поддерживать инвентарь слотов B1 – B5 как можно более ровным или, по крайней мере, первый ряд как можно дольше. Другими словами, встроенная логика не обязательно будет выдавать диетическую колу® из слота B1, когда я выберу B1.

Разработайте алгоритм и напишите псевдокод, который выполняет задачу сохранения этого привлекательного переднего ряда как можно дольше. Общая цель состоит в том, чтобы держать передний ряд B1 – B5 полным и не допускать пустого слота как можно дольше.

Ограничьте свой псевдокод диетическими Кока – колами (слоты B1-B5) и предположите, что вы начинаете с полной машины из 50 диетических кока-колов (10 строк и 5 столбцов). Вы должны псевдокодировать часть выбора и распределения транзакции. Не беспокойтесь о вводе денег, внесении изменений и т. д.… Ваш псевдокод должен быть достаточно подробным, чтобы описать полный алгоритм выбора и дозирования диетической колы®.

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

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

Create integer for total diet cokes in slot 1 equals 10
Create integer for total diet cokes in slot 2 equals 10
Create integer for total diet cokes in slot 3 equals 10
Create integer for total diet cokes in slot 4 equals 10
Create integer for total diet cokes in slot 5 equals 10


Promt user to select a slot


If the selected slot's diet coke is greater than 1 
	Then selected slot diet cokes minus one



Else if selected slot is slot 1 & if slot 2's diet coke is greater than 1
	Then slot 2's diet cokes minus one
	
Else if selected slot is slot 1 & if slot 3's diet coke is greater than 1
	Then slot 3's diet cokes minus one
	
Else if selected slot is slot 1 & if slot 4's diet coke is greater than 1
	Then slot 4's diet cokes minus one
	
Else if selected slot is slot 1 & if slot 5's diet coke is greater than 1
	Then slot 5's diet cokes minus one


	
Else if selected slot is slot 2 & if slot 3's diet coke is greater than 1
	Then slot 3's diet cokes minus one
		
Else if selected slot is slot 2 & if slot 4's diet coke is greater than 1
	Then slot 4's diet cokes minus one
		
Else if selected slot is slot 2 & if slot 5's diet coke is greater than 1
	Then slot 5's diet cokes minus one
		
Else if selected slot is slot 2 & if slot 1's diet coke is greater than 1
	Then slot 1's diet cokes minus one
	


Else if selected slot is slot 3 & if slot 4's diet coke is greater than 1
	Then slot 4's diet cokes minus one

Else if selected slot is slot 3 & if slot 5's diet coke is greater than 1
	Then slot 5's diet cokes minus one
	
Else if selected slot is slot 3 & if slot 1's diet coke is greater than 1
	Then slot 1's diet cokes minus one
	
Else if selected slot is slot 3 & if slot 2's diet coke is greater than 1
	Then slot 2's diet cokes minus one
	


Else if selected slot is slot 4 & if slot 5's diet coke is greater than 1
	Then slot 5's diet cokes minus one
	
Else if selected slot is slot 4 & if slot 1's diet coke is greater than 1
	Then slot 1's diet cokes minus one
	
Else if selected slot is slot 4 & if slot 2's diet coke is greater than 1
	Then slot 2's diet cokes minus one
	
Else if selected slot is slot 4 & if slot 3's diet coke is greater than 1
	Then slot 3's diet cokes minus one



Else if selected slot is slot 5 & if slot 1's diet coke is greater than 1
	Then slot 1 diet cokes minus one
	
Else if selected slot is slot 5 & if slot 2's diet coke is greater than 1
	Then slot 2 diet cokes minus one
	
Else if selected slot is slot 5 & if slot 3's diet coke is greater than 1
	Then slot 3 diet cokes minus one
	
Else if selected slot is slot 5 & if slot 4's diet coke is greater than 1
	Then slot 4 diet cokes minus one
	


Else if selected slot is greater than 0
	Then selected slot's diet cokes minus one



Else if selected slot is slot 1 & if slot 2's diet coke is greater than 0
	Then slot 2's diet cokes minus one
	
Else if selected slot is slot 1 & if slot 3's diet coke is greater than 0
	Then slot 3's diet cokes minus one
	
Else if selected slot is slot 1 & if slot 4's diet coke is greater than 0
	Then slot 4's diet cokes minus one
	
Else if selected slot is slot 1 & if slot 5's diet coke is greater than 0
	Then slot 5's diet cokes minus one
	


Else if selected slot is slot 2 & if slot 3's diet coke is greater than 0
	Then slot 3's diet cokes minus one
		
Else if selected slot is slot 2 & if slot 4's diet coke is greater than 0
	Then slot 4's diet cokes minus one
		
Else if selected slot is slot 2 & if slot 5's diet coke is greater than 0
	Then slot 5's diet cokes minus one
		
Else if selected slot is slot 2 & if slot 1's diet coke is greater than 0
	Then slot 1's diet cokes minus one
	


Else if selected slot is slot 3 & if slot 4's diet coke is greater than 0
	Then slot 4's diet cokes minus one

Else if selected slot is slot 3 & if slot 5's diet coke is greater than 0
	Then slot 5's diet cokes minus one
	
Else if selected slot is slot 3 & if slot 1's diet coke is greater than 0
	Then slot 1's diet cokes minus one
	
Else if selected slot is slot 3 & if slot 2's diet coke is greater than 0
	Then slot 2's diet cokes minus one
	


Else if selected slot is slot 4 & if slot 5's diet coke is greater than 0
	Then slot 5's diet cokes minus one
	
Else if selected slot is slot 4 & if slot 1's diet coke is greater than 0
	Then slot 1's diet cokes minus one
	
Else if selected slot is slot 4 & if slot 2's diet coke is greater than 0
	Then slot 2's diet cokes minus one
	
Else if selected slot is slot 4 & if slot 3's diet coke is greater than 0
	Then slot 3's diet cokes minus one



Else if selected slot is slot 5 & if slot 1's diet coke is greater than 0
	Then slot 1 diet cokes minus one
	
Else if selected slot is slot 5 & if slot 2's diet coke is greater than 0
	Then slot 2 diet cokes minus one
	
Else if selected slot is slot 5 & if slot 3's diet coke is greater than 0
	Then slot 3 diet cokes minus one
	
Else if selected slot is slot 5 & if slot 4's diet coke is greater than 0
	Then slot 4 diet cokes minus one	
	

Else Print "There are no diet cokes left in this machine."

#realJSOP

if (iHadListenedInClass)
{
iWouldKnow = ответ;
}

Member 13689794

Видите ли, я мог бы просто сделать проект, не сканируя его слева направо, и превратить его в кусок пирога. Однако мне хотелось посмотреть, смогу ли я это сделать. Кроме того, в настоящее время я нахожусь в базовом классе C# и пытаюсь немного продвинуться вперед. Не надо быть придурком. :)

#realJSOP

Да, есть необходимость быть придурком. Я дал вам код ниже.

Еще одна вещь: раздел "Что я пробовал" предназначен не для того, чтобы вы публиковали домашнее задание, а для того, чтобы публиковать то, что вы действительно пробовали, то есть код, который вы написали.

#realJSOP

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

Member 13689794

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

Member 13689794

Я ценю это, я все еще пытаюсь изучить структуру codeproject.

#realJSOP

Как правило, мы плохо относимся к домашним заданиям. Я виню глобальное потепление.

Member 13689794

Хорошо, я буду иметь это в виду, если снова опубликую сообщение на codeproject. Спасибо, что предупредил.

2 Ответов

Рейтинг:
2

#realJSOP

Учитывая массив слотов примерно так:

static int[] slots = new int[]{10,10,10,10,10};


Вызовите этот метод для каждого запрошенного кокса:

public static void TakeACoke(int slot)
{
    Console.WriteLine(string.Concat("Requested from slot ", slot));
    slot--;
    if (slots.Sum() == 0)
    {
        Console.WriteLine("Sorry, the machine is empty.");
        return;
    }
    else
    {
        do
        {
            if (slots[slot]>0)
            {
                Console.WriteLine(string.Concat("Retrieved from slot ", slot+1));
                slots[slot] = slots[slot]-1;
                break;
            }
            else
            {
                slot = (slot==4) ? 1 : slot+1;
            }
        } while (true);
    }
    Console.WriteLine(string.Format("Remaining: {0:0#}  {1:0#}  {2:0#}  {3:0#}  {4:0#}", slots[0], slots[1], slots[2], slots[3], slots[4]));
}


Вы можете использовать метод из вашего основного метода с помощью этого кода (избавляет вас от необходимости вручную просить кока-колу 50 раз):
Random random = new Random();
do
{
    // randomly select a slot until the machine is empty
    TakeACoke(random.Next(1,5));
} while (slots.Sum() > 0);

// test an empty machine
TakeACoke(1);

// pause the console so you can inspect the output
Console.ReadLine();


Это 25 линий достаточно короткий?


Рейтинг:
11

#realJSOP

О, ваш инструктор хочет только код psuedo? Что угодно...

Instantiate array (length of 5 elements) of integers

Request slot number from user
Call the TakeACoke method with the requested slot number as a parameter

TakeACokeMethod (int slot):
Subtract 1 from user-specified value (because array is zero-based)

if the total of all slots is zero return "empty machine" message
else
   repeat 
       if the requested slot is not empty
           subtract 1 from the value of the slot
       else
           if the current slot is 4
               set the slot to 1
           else
               increment slot
   until we find a slot that has at least one coke