Advertisement
Danielos168

Kolokwium__Algorytmy do Zad4.

Jan 17th, 2021
887
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.16 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Kolokwium2_TeoriaAlgorytmów
  9. {
  10.     class Program
  11.     {
  12.         public static void hoteleTrasa(int[] trasa, int rr)
  13.         {
  14.             if (rr > 0)
  15.             {
  16.                 hoteleTrasa(trasa, trasa[rr]);
  17.             }
  18.  
  19.             Console.Write(rr + " ");
  20.         } //pomocnicza funkcja do zadania 2.
  21.         public static bool dict(char[] s, int p, int k)
  22.         {
  23.             string tmp = "";
  24.             for (int i = p; i <= k; i++)
  25.             {
  26.                  tmp = tmp + s.ElementAt(i);
  27.             }
  28.             string[] dictionary = {"jesteśmy", "najlepsi", "wśród", "najlepszych"};
  29.             return dictionary.Contains(tmp);
  30.  
  31.         } //pomocnicza funkcja do zadania 4(TU UZUPEŁNIĆ POPRAWNYMI SŁÓWKAMI)
  32.         static void Main(string[] args)
  33.         {
  34.             /*
  35.             int[] a = {-5,7,3,-10,12,-8,5,9};
  36.             Zadanie1(a);
  37.             Console.ReadKey();
  38.             */
  39.             /*
  40.             int[] b = {280,461,490,542,759,786,883};
  41.             Zadanie2(b);
  42.             Console.ReadKey();
  43.             */
  44.             /*
  45.             int[] m = {117, 181, 298, 396, 432, 454, 610, 627, 680, 774};
  46.             int[] p = {14, 20, 9, 19, 18, 11, 8, 14, 16, 5};
  47.             Zadanie3(m,p,130);
  48.             Console.ReadKey();
  49.             */
  50.             /*
  51.             string s = "najlepsiwśródnajlepszych"; //Tutaj musiałem zmienic wejściowego stringa(wśród zamiast z). program nie działa z
  52.                                                 //jednoznakowymi stringami jak "z / w / u"
  53.             char[] ss = s.ToCharArray();
  54.             Zadanie4(ss);
  55.             Console.ReadKey();
  56.             */
  57.  
  58.            
  59.  
  60.         }
  61.         //Programowanie Dynamiczne Ćw8.
  62.         static void Zadanie1(int[] a) //podciąg spójny o mozliwie najwiekszej sumie (Kroki: https://www.geeksforgeeks.org/largest-sum-contiguous-subarray/)
  63.         {
  64.             int size = a.Length;
  65.             int max_so_far = int.MinValue,
  66.                 max_ending_here = 0;
  67.             int s = 0;
  68.             int start = 0;
  69.             int end = 0;
  70.  
  71.             for (int i = 0; i < size; i++)
  72.             {
  73.                 max_ending_here = max_ending_here + a[i];
  74.  
  75.                 if (max_so_far < max_ending_here)
  76.                 {
  77.                     max_so_far = max_ending_here;
  78.                     start = s;
  79.                     end = i;
  80.                 }
  81.  
  82.                 if (max_ending_here < 0)
  83.                 {
  84.                     max_ending_here = 0;
  85.                     s = i + 1;
  86.                 }
  87.             }
  88.  
  89.             Console.Write("Najwiekszym podciągiem spójnym o najwiekszej sumie jest podciąg: ");
  90.             for (int i = start; i <= end; i++)
  91.             {
  92.                 Console.Write(a[i] + ",");
  93.             }
  94.             Console.Write(" o sumie: "+max_so_far);
  95.         }
  96.  
  97.         static void Zadanie2(int[] b) //Algorytm efektywnego wyznaczania ciągu hoteli w podrózy z karą
  98.         {
  99.             int[] kara = new int[b.Length];
  100.             int[] trasa = new int[b.Length];
  101.             kara[0] = 0;
  102.             kara[1] = (int) Math.Pow(200 - b[1], 2);
  103.             trasa[0] = trasa[1] = 0;
  104.  
  105.             for (int i = 2; i < b.Length; i++)
  106.             {
  107.                 kara[i] = -1000;
  108.                 trasa[i] = -1;
  109.             }
  110.  
  111.             for (int j = 2; j < b.Length; j++)
  112.             {
  113.                 for (int d = 0; d < j; d++)
  114.                 {
  115.                     int tmp = (int)(Math.Pow(200 - (b[j] - b[d]),2)+kara[d]);
  116.                     if (tmp < kara[j])
  117.                     {
  118.                         kara[j] = tmp;
  119.                         trasa[j] = d;
  120.                     }
  121.                     else if(kara[j] == -1000)
  122.                     {
  123.                         kara[j] = tmp;
  124.                         trasa[j] = d;
  125.                     }
  126.                 }
  127.             }
  128.  
  129.             for (int i = 1; i < b.Length; i++)
  130.             {
  131.                 Console.WriteLine("Hotel w odległości: " + b[i] + ", kara wynosi: " + kara[i] +
  132.                                   ". Optymalna trasa przez podane hotele to: ");
  133.                 hoteleTrasa(trasa,i);
  134.                 Console.WriteLine();
  135.             }
  136.            
  137.         }
  138.  
  139.         static void Zadanie3(int[] m, int[] p, int k) //Algorytm maksymalnego oczekiwanego całkowitego zysku
  140.         {
  141.             int[] P = new int[m.Length];
  142.             int temp = 0;
  143.             int mnoznik = 0;
  144.             for (int a = 1; a < m.Length; a++)
  145.             {
  146.  
  147.                 for (int b = 0; b <= a - 1; b++)
  148.                 {
  149.                     if (m[a] - m[b] < k)
  150.                     {
  151.                          mnoznik = 0;
  152.                     }
  153.                     else if (m[a] - m[b] >= k)
  154.                     {
  155.                          mnoznik = 1;
  156.                     }
  157.  
  158.                     temp = P[b] + (mnoznik * p[a]);
  159.  
  160.                     if (temp > P[a])
  161.                     {
  162.                         P[a] = temp;
  163.                     }
  164.                 }
  165.  
  166.                 if (P[a] < p[a])
  167.                 {
  168.                     P[a] = p[a];
  169.                 }
  170.             }
  171.  
  172.             Console.WriteLine("Przewidywany optymalny zysk to :"+P.Max());
  173.  
  174.         }
  175.  
  176.         static void
  177.             Zadanie4(char[] s) //Algorytm wypisujący pojedyncze słowa ze złączonego zdania. Trzeba uzupełnic słownik u góry
  178.         {
  179.             int[] R = new int[s.Length];
  180.             for (int i = 0; i < s.Length; i++)
  181.             {
  182.                 R[i] = 0;
  183.                 for (int j = 0; j <= i - 1; j++)
  184.                 {
  185.                     if (dict(s, j, i) == true)
  186.                     {
  187.                         R[j] = 1;
  188.                     }
  189.                 }
  190.             }
  191.  
  192.             for (int i = 0; i < s.Length; i++)
  193.             {
  194.                 if (R[i] == 1)
  195.                 {
  196.                     Console.Write(" ");
  197.                 }
  198.  
  199.                 Console.Write(s[i]);
  200.             }
  201.         }
  202.     }
  203. }
  204.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement