powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как проще можно было написать программу
14 сообщений из 14, страница 1 из 1
Как проще можно было написать программу
    #38500406
SRVdudko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эту задачу я решал на собеседовании на работу, но вчем ошибка была не сказали. Решить и написать прогу на си-подобном синтаксисе
Вот задача
Одному торговцу редкими экзотическими фруктами необходимо посетить 30
рынков. У него имеется 3 мешка, в каждый из которых помещается не более
30 плодов. При посещении рынка в качестве торговой пошлины необходимо
заплатить по одному плоду из каждого непустого мешка. Плоды можно перекладывать из мешка в мешок(для оптимизации)
Если изначально у торговца было 90 плодов, то сколько их останется после посещения всех 30 рынков?
Написать программу выводящую наибольшее кол-во плодов которое могло бы остаться
Мой ответ 22 плода
расписал им:
поситили 1 рынок осталось 29+29+29;
2 28+28+28 осталось
3 27+27+27осталось
4 26+26+26осталось
5 25+25+25осталось
6 24+24+24
7 23+23+23
8 22+22+22
9 21+21+21
10 20+20+20
11 19+19+19
12 18+18+18
13 17+17+17
14 16+16+16
15 15+15+15 = 30+15 тут мы 3й мешок можем освободить
16 29+14
17 28+13
18 27+12
19 26+11
20 25+10
21 24+9
22 23+8 нельзя еще переложить
23 22+7 перекдадываем в один мешок остается 29
24 28
25 27
26 26
27 25
28 24
29 23
30 22


Сделать программу выводящую результат решения этой задачи.

Моя программа
int b1=30;
int b2 =30;
int b3 = 30;
for(int i=0;i<30;i++){
if((b1>15)&&(b2>15)&&(b3>15)){
b1--;
b2--;
b3--;
}
else if((b1==15) && (b2==15) && (b3==15)){
b1=b2+b3;
b1--;
b2--;
}
else if ((b1>22)&&(b2>7)){
b1--;
b2--;
}
else if((b1<=22)&&(b2<=7)){
b1=b1+b2;
b1--;
}
else if(b1<=28){
b1--;
}

}

System.out.println(b1);
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38500419
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SRVdudko,

25
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38500496
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это треш какой-то, не программа. Где алгоритмы, хоть какие-то зачатки масштабируемости, универсальности,

Код: sql
1.
2.
3.
4.
        int amt = 90;
        for (int i = 0; i < 30; i++) {
            amt -= 1 + (amt-1) / 30;;
        }
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38500562
s_q_r_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так немного читабельнее (проще для понимания):
Код: plaintext
1.
2.
3.
4.
5.
6.
int amt = 90;
for (int i = 0; i < 30; i++) {
    if (amt > 60) amt -= 3;
    else if (amt > 30) amt -= 2;
    else amt--;
    }
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38500566
s_q_r_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а так еще ближе к самодокументированному коду:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int bags = 3;
int max_in_bag = 30;
int bazaar_count = 30;
int fruit_count = bags * max_in_bag;
for (int bazaar = 0; bazaar < bazaar_count; bazaar++)
    for (int bag = 0; bag < bags; bag++)
        if (fruit_count > bag * max_in_bag) 
            fruit_count --;
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38500572
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SRVdudko,

если перекладывать частями --оствток 24
303030292929128282822727273262626425252552424246232323722222282121219202020103030переклад2929112828122727132626142525152424162323172222182121192020201919211818221717231616241515переклад25302926282727282629253024остатокрынок23
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38500596
s_q_r_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, таки 25!

а в моём коде для ясности третью снизу строку заменить на
Код: plaintext
1.
	for (int bag = bags; bag >= 0; bag--)
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38500775
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА, 25. За 10 рынков освобождаем первый мешок, за 15 - второй, и остаётся лишиться ещё 5 штук за 5 оставшихся рынков.
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38500810
SRVdudko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Даааа... какой я быдлокодер. Пойду наверно начинать с азов алгоритмов. Лагман и s_q_r_t Спасибо
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38501449
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну поскольку в условии
"Плоды можно перекладывать из мешка в мешок(для оптимизации)"
и ничего не сказано о том когда можно перекладывать
на 10-м можно отдать только 2
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38502493
digor_ua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterSRVdudko,

25
Проверил опытным путем
Таки да, 25

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        private const int BagItemsCount = 30;
        private const int ApproachesCount = 30;

        static void Main(string[] args)
        {
            int[] bags = new int[] { BagItemsCount, BagItemsCount, BagItemsCount };
            int approachesCount = ApproachesCount;

            while (GetBagsCount(bags) > 0 && approachesCount > 0)
            {
                bags = TakeOneBagItem(bags);
                bags = ShiftBags(bags);
                approachesCount--;
            }
            Console.WriteLine(GetBagsCount(bags));
        }

        private static int[] ShiftBags(int[] bags)
        {
            for (int i = 0; i < bags.Length; i++)
            {
                if (bags[i] < BagItemsCount)
                {
                    for (int j = bags.Length - 1; j > i && bags[i] < 30; j--)
                    {
                        while (bags[j] > 0 && bags[i] < 30)
                        {
                            bags[j] = bags[j] - 1;
                            bags[i] = bags[i] + 1;
                        }
                    }
                }
            }
            return bags;
        }

        private static int[] TakeOneBagItem(int[] bags)
        {
            for (int i = 0; i < bags.Length; i++)
            {
                if (bags[i] > 0)
                {
                    bags[i] = bags[i] - 1;
                }
            }
            return bags;
        }

        private static int GetBagsCount(int[] bags)
        {
            int result = 0;
            foreach (var bag in bags)
            {
                result += bag;
            }
            return result;
        }
    }
}
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38502575
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mНу поскольку в условии
"Плоды можно перекладывать из мешка в мешок(для оптимизации)"
и ничего не сказано о том когда можно перекладывать
на 10-м можно отдать только 2
В данном случае, я совсем не прав
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38502792
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем столько вложенных циклов в shifbags если достаточно посчитать сумму сколько в них всего итемов и потом
Код: plaintext
1.
for(int i = 0; i < num_bags; ++i) if(sum > 30) { bag[i]=30; sum -=30; } else { bag[i]=sum; break; }


При условии что до подсчета сумм переполнения в сумках не было результат получится корректным.
...
Рейтинг: 0 / 0
Как проще можно было написать программу
    #38502793
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..ну и занулить оставшиеся, само собой.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как проще можно было написать программу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]