Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/40: Рейтинг темы: голосов - 40, средняя оценка - 4.85
0 / 2 / 1
Регистрация: 03.12.2019
Сообщений: 16

Жадные алгоритмы

03.12.2019, 19:58. Показов 8889. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Андрей едет из пункта A в пункт B на автомобиле. Расстояние между этими пунктами равно N километров. Известно, что с полным баком автомобиль способен проехать k километров. Дана карта, на которой отмечены координаты бензоколонок, относительно пункта A. Определите минимальное число заправок, которые придется сделать Андрею чтобы успешно достичь пункта B. Известно, что при выезде из пункта A бак был полон. Входные данные: в первой строке вводятся числа N и k (натуральные, не превосходят 1000). В следующей строке вводится количество бензоколонок S, потом следует S натуральных чисел, не превосходящих N – расстояния от пункта A до каждой заправки. Заправки упорядочены по удаленности от пункта A. Выходные данные: если при данных условиях пункта B достичь невозможно, то вывести число -1. Если решение существует, то вывести минимальное количество остановок на дозаправку, которое нужно чтобы достичь пункта B.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2019, 19:58
Ответы с готовыми решениями:

Жадные алгоритмы
По 5 клеточному полю, клетки которой расположены по координатам (-1,0), (0,0), (0,1), (0,1), (0,-1), перемещается одно из двух тел(не...

Жадные алгоритмы
По 5 клеточному полю, клетки которой расположены по координатам (-1,0), (0,0), (0,1), (0,1), (0,-1), перемещается одно из двух тел(не...

Жадные алгоритмы. Поиск минимального среднеарифметического
Здравствуйте, уважаемые форумчане! Вот еще одна задача на жадные алгоритмы, которую удалось придумать: /* Дан целочисленный...

12
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
03.12.2019, 20:02
kristina71, что-нибудь сами сделали?
Хотя бы ввод значений?
0
0 / 2 / 1
Регистрация: 03.12.2019
Сообщений: 16
03.12.2019, 20:47  [ТС]
Слишком сложно(, я только начала изучать языки программирования
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,037
Записей в блоге: 2
03.12.2019, 20:58
kristina71, ну, наверное, не "только".
Как минимум семестр заканчивается.
Хоть что же проходили....
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
03.12.2019, 21:05
Элд Хасп, видимо "проходили мимо"
0
0 / 2 / 1
Регистрация: 03.12.2019
Сообщений: 16
03.12.2019, 21:10  [ТС]
Ну до этого темы были легче, поэтому я особо не напрягалась, по-настоящему изучать C# я начала совсем недавно
Месяц где-то назад
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
03.12.2019, 21:25
Здесь вопрос о том - как решить эту задачу, или о том - как записать её решение с помощью C#?

kristina71, Забудьте пока о программировании и просто нарисуйте эту задачу на листе бумаги. Подумайте о том, как её можно решить. Запишите ваши мысли рядом, составьте план действий. Решите эту задачу на листке. После всего этого, перевести ваши действия в код будет совсем не сложно.
0
0 / 2 / 1
Регистрация: 03.12.2019
Сообщений: 16
08.12.2019, 21:33  [ТС]
Ну как я поняла, чтобы решить эту задачу, мы должны построить наш алгоритм так, чтобы он проверял доедем ли мы с доступным нам количеством бензина до пункта B. Если нет, то он должен искать бензоколонку до которой мы сможем доехать и уже от нее также проверять в направлении к пункту B. Если бенза нам не хватит даже для ближайшей бензоколонки, то тогда наша программа выводит -1. Если нашего бензина хватит, чтобы доехать до пункта B, то программа выдает сколько бензоколонок мы посетили за время путешествия(если мы их посетили(такое же тоже может быть)). Думаю, задача должна как-то так решаться.
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
09.12.2019, 01:45
kristina71, это уже что-то, жаждим увидеть реализация, ну хотя бы попытки!!!
0
0 / 2 / 1
Регистрация: 03.12.2019
Сообщений: 16
11.12.2019, 22:18  [ТС]
я поэтому и попросила помочь с реализацией, потому что у меня с ней проблемы
0
 Аватар для Aferuga
644 / 528 / 324
Регистрация: 20.05.2015
Сообщений: 1,469
12.12.2019, 04:01
Цитата Сообщение от kristina71 Посмотреть сообщение
Если бенза нам не хватит даже для ближайшей бензоколонки
Ну это можно проверить ещё при вводе расстояний между бензоколонками, если разница между ними превышает k, то можно смело выдавать -1.
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
12.12.2019, 23:05
Цитата Сообщение от kristina71 Посмотреть сообщение
я поэтому и попросила помочь с реализацией, потому что у меня с ней проблемы
Тогда возможно вам поможет следующий код. Он НЕ делает всё что было в задании (ввод/вывод результатов не реализовано). Но код наглядно печатает то, что происходит с машиной во время пути. Это может натолкнуть вас на правильные мысли и вы допишите всё, чего не хватает.

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;
 
namespace ConsoleApplication103
{
    class Program
    {
        class MainClass
        {
            static void Main(string[] args)
            {
                int AB_km = 19;  // расстояние от А до Б
                int fullBak_km = 4; // насколько км хватает полного бака бензина
                int bak = fullBak_km; // текущий бак автомобиля, будем заправлять и расходовать его содержимое
                int[] azs_km = { 2, 4, 8, 12, 14 }; // заправки на пути от А до Б (в километрах от А)
 
                int count = 0; // сюда запишем кол-во остановок для заправки бензина
                int dist; // здесь будем хранить расстояние до следующей заправки (для рассчётов)
 
                for (int i = 0; i < azs_km.Length; i++)
                {
                    // узнаём дистанцию до следующей заправки
                    if (i == 0) dist = azs_km[i]; // для начала пути от А, до первой заправки
                    else if (i == azs_km.Length - 1) dist = AB_km - azs_km[i]; //от последней заправки до пункта Б
                    else dist = azs_km[i + 1] - azs_km[i]; // для промежуточных заправок (расстояние между ними)
 
                    Console.WriteLine($"сейчас в баке бензина на {bak} км");
                    Console.WriteLine($"следующая АЗС-{i + 1} через {dist} км");
 
 
                    if (dist > fullBak_km)
                    {
                        Console.WriteLine($".. слишком далеко, даже полного бака бензина не хватит..");
                        Console.WriteLine($".. смогли доехать только до АЗС-{i + 1} на км № {azs_km[i]}, ДАЛЬШЕ ЕХАТЬ НЕ МОЖЕМ..");
                        break;
                    }
 
                    bak -= dist;
                    if (bak == 0)
                    {
                        count++;
                        bak = fullBak_km;
                        Console.WriteLine($"доехали до АЗС-{i + 1} на км № {azs_km[i]}, бак пустой -> ЗАПРАВИЛИ ПОЛНЫЙ БАК");
                    }
                    else if (bak < 0)
                    {
                        count++;
                        bak = fullBak_km;
                        Console.WriteLine($"нужно дозаправить бак в АЗС-{i + 1} на км № {azs_km[i]}, -> ДОЗАПРАВИЛИ ПОЛНЫЙ БАК");
 
                    }
                    else
                    {
                        Console.WriteLine($"проехали мимо АЗС-{i + 1} на км № {azs_km[i]}");
                    }
                    Console.WriteLine("-------------------------------------------");
 
                    if (i == azs_km.Length - 1)
                        Console.WriteLine($"ПРОЕХАЛИ ВЕСЬ ПУТЬ!!! [количество остановок на АЗС --> {count} раз(а)]\n");
 
                }
 
                Console.WriteLine("\n");
                Console.ReadKey(true);
 
            }
 
        }
    }
}
0
0 / 2 / 1
Регистрация: 03.12.2019
Сообщений: 16
22.12.2019, 21:11  [ТС]
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Код конечно не идеален, но пятерку я за него получила
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
Console.WriteLine("Введите расстояние от А до В");
            int N = Convert.ToInt32(Console.ReadLine());
            int AB_km = N;  // расстояние от А до Б
            Console.WriteLine("ВВедите на сколько километров хватает полного бака");
            int k = Convert.ToInt32(Console.ReadLine());
            int fullBak_km = k; // насколько км хватает полного бака бензина
            int bak = fullBak_km; // текущий бак автомобиля, будем заправлять и расходовать его содержимое
            Console.WriteLine("Введите количество бензоколонок и расстояние от бензоколонок до пункта А");
            Console.ReadLine();
            var azs_km = Console.ReadLine().Split().Select(int.Parse).ToArray();
             // заправки на пути от А до Б (в километрах от А)
 
            int count = 0; // сюда запишем кол-во остановок для заправки бензина
            int dist; // здесь будем хранить расстояние до следующей заправки (для рассчётов)
 
            for (int i = 0; i < azs_km.Length; i++)
            {
                // узнаём дистанцию до следующей заправки
                if (i == 0) dist = azs_km[i]; // для начала пути от А, до первой заправки
                else if (i == azs_km.Length - 1) dist = AB_km - azs_km[i]; //от последней заправки до пункта Б
                else dist = azs_km[i + 1] - azs_km[i]; // для промежуточных заправок (расстояние между ними)
 
                Console.WriteLine($"сейчас в баке бензина на {bak} км");
                Console.WriteLine($"следующая АЗС-{i + 1} через {dist} км");
 
 
                if (dist > fullBak_km)
                {
                    Console.WriteLine($".. слишком далеко, даже полного бака бензина не хватит..");
                    Console.WriteLine($".. смогли доехать только до АЗС-{i + 1} на км № {azs_km[i]}, ДАЛЬШЕ ЕХАТЬ НЕ МОЖЕМ..");
                    Console.WriteLine("-1");
 
                    break;
                }
 
                bak -= dist;
                if (bak == 0)
                {
                    count++;
                    bak = fullBak_km;
                  
                }
                else if (bak < 0)
                {
                    count++;
                    bak = fullBak_km;
                    
 
                }
                if (i == azs_km.Length - 1)
                    Console.WriteLine($"ПРОЕХАЛИ ВЕСЬ ПУТЬ!!! [количество остановок на АЗС --> {count} раз(а)]\n");
 
 
 
 
 
            }
 
            
            Console.ReadKey(true);
 
        }
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2019, 21:11
Помогаю со студенческими работами здесь

Жадные алгоритмы. Оптимальный поход в магазин
Здравствуйте, уважаемые форумчане! Придумал несложную задачу на жадные алгоритмы и сам ее решил. Надеюсь, кому-то будет интересно. Вот...

Жадные алгоритмы. Разбиение числа на полные квадраты
Здравствуйте, уважаемые форумчане! Решил несложную задачу на жадные алгоритмы. Хотел выложить здесь. По-моему, этот пример довольно...

Жадные алгоритмы. Задача с использованием одномерного алгоритма
Здравствуйте, уважаемые форумчане! Немного изучив жадные алгоритмы, решил придумать несложную задачу на их использование. Надеюсь, кто-то...

Реализовать алгоритмы построения прямой: простой пошаговый алгоритм и алгоритмы Брезенхема
1. Написать на языке PASCAL программу, реализующую алгоритмы построения прямой: простой пошаговый алгоритм и алгоритмы Брезенхема для...

Циклические алгоритмы. Алгоритмы обработки последовательностей чисел
Помогите пожалуйста program Lab_3_1; const x1=1; xn=3; dx=0.2; a=3.9; b=2.3; var x,y,z:real; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru