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

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

03.12.2019, 19:58. Показов 8916. Ответов 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
 Аватар для Элд Хасп
16123 / 11247 / 2888
Регистрация: 21.04.2018
Сообщений: 33,070
Записей в блоге: 2
03.12.2019, 20:02
kristina71, что-нибудь сами сделали?
Хотя бы ввод значений?
0
0 / 2 / 1
Регистрация: 03.12.2019
Сообщений: 16
03.12.2019, 20:47  [ТС]
Слишком сложно(, я только начала изучать языки программирования
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16123 / 11247 / 2888
Регистрация: 21.04.2018
Сообщений: 33,070
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru