Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
2.6 kB
1
Indexable
Never
using System;

namespace Studenci
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int d = 2000;
            int h = 7;


            int[][] hotele = new int[][] //tablica tablic z danymi 
            {
                 new int[] { 100, 54 }, //pierwszy element tablicy(wiersza) dystans, drugi cena
                 new int[] { 120, 70 },
                 new int[] { 400, 17 },
                 new int[] { 700, 38 },
                 new int[] { 1000, 25 },
                 new int[] { 1200, 18 },
                 new int[] { 1440, 40 }
            };


            int i = 0; //zmienna pomocnicza i oznacza start przeszukiwania 
            int droga = 0; //zmienna pomocnicza na dotychczasowy czas

            int n = 0; //zmienna na ilosc porownan 

            int[] dystanse = new int[h]; //zmienna na tablice wynikowa dystansów hoteli
            int k = 0; //zmienna licznik ilosci odwiedzonych hoteli


            while (droga < d) //wykonuj dopoki droga pokonana mniejsza od dystans
            {
                if (d - droga < 800) //gdy pozostala droga mniejsza od dystans do pokonania
                {
                    break; //zatrzymaj petle
                }

                double minc = int.MaxValue; //ustal duza wartosc jako min 
                int mi = i; //zmienna na indeks min hotelu

                for (int j = i; j < hotele.Length; j++) //petla od i do konca tablicy hoteli
                {
                    n++; //zwieksz ilosc porownan o 1
                    if (hotele[j][1] < minc && hotele[j][0] - droga <= 800) //jezeli hotel ma mniejsza cene niz min oraz dystans do hotelu jest mniejszy niz 800
                    {
                        minc = hotele[j][1]; //zapisz nowe minimum
                        mi = j; //zapisz nowy indeks minimum
                    }
                }

                dystanse[k] = hotele[mi][0]; //dopisz znaleziony hotel jego dystans do tablicy dystansów
                k++; //zwieksz licznik odwiedzonych hoteli o 1
                droga += hotele[mi][0]; //dodaj jego dystans do drogi łącznej 
                i = mi + 1; //przesun i o jedno miejsce poza znaleziony hotel
            }

            //przejdz od 0 do k
            for (int j = 0; j < k; j++)
            {
                Console.Write(dystanse[j] + " "); //wyswietl hotel na pozycji j
            }

            Console.WriteLine();

            Console.WriteLine("n porównań = " + n);

        }
    }
}