Strona główna » Kursy » Zadania » Skoki na kijku pogo
 

Skoki na kijku pogo

Zadanie

Wczytaj od użytkownika liczbę jak duża powinna być tablica. Następnie wczytaj do niej kolejne, wpisywane przez użytkownika liczby. Następnie sprawdź dla jakiego najmniejszego n suma ciągu n pierwszych wyrazów tablicy przekracza 100. Sumę ciągu wyrażamy wzorem: . Na sam koniec wypisz dla jakiego

Oryginalna treść zadania

Wyjaśnienie

Na pierwszy rzut oka wzór może wydawać się nieco abstrakcyjny, ale w rzeczywistości pozwala matematycznie zrozumieć zależności w zadaniu. Wysokość z jakiej skacze skoczek z pierwszego schodka na drugi wynosi dokładnie wysokość pierwszego schodka czyli: . Drugi z kolei to połowa pierwszego przeskoku dodać wysokość drugiego schodka czyli . To pozwala nam stwierdzić, że . Dzięki temu widzimy, że możemy wyliczać wysokość na jaką skacze skoczek przy pomocy pętli.

Druga część jeśli zrozumiało się pierwszą powinna być oczywista, bo wystarczy kilka prostych przekształceń, aby uzyskać odpowiedź:

Wiemy też, że wysokość schodka to liczba całkowita czyli możemy przyjąć, że .

Implementacja

Rozwiązanie

C++
C#
  1. static void Main(string[] args) {
  2.   int n;
  3.   Console.WriteLine("Podaj liczbę schodków: ");
  4.   n = Convert.ToInt32(Console.ReadLine());
  5.   int[] t = new int[n];
  6.   Console.WriteLine("Podaj wysokości schodków (w cm): ");
  7.   for (int i = 0; i < n; i++)
  8.     t[i] = Convert.ToInt32(Console.ReadLine());
  9.   Console.WriteLine("Skoczek wykona {0} skoki", jumps(t));
  10.   Console.WriteLine("Wys. 1 schodka: {0}", first_jump_height(t[1]));
  11.   Console.ReadKey();
  12. }

(2.) W głównej funkcji Main() (3. - 4.) wczytujemy liczbę schodków oraz (6. - 9.) kolejne wysokości schodków. Korzystając z funkcji jumps() oraz first_jump_height() (11. - 12.) wypisujemy szukane wartości.

C++
C#
  1. static int jumps(int[] tab) {
  2.   int skokow = 0, spadek = 0;
  3.   for (int i = 0; i < tab.Length; i++) {
  4.     spadek = (int)(spadek / 2.0) + tab[i];
  5.     if (spadek > 100)
  6.       return skokow;
  7.     skokow++;
  8.   }
  9.   return skokow;
  10. }

Do sprawdzenia ile skoków wykona skoczek służy funkcja jumps(), która jako argument przyjmuje tablicę wysokości schodków. Na początek deklarowane są (2.) zmienne do przechowywania liczby skoków skokow oraz spadku spadek. (3.) Dla każdego kolejnego schodka program: (4.) wylicza spadek i (5.) jeśli spadek jest większy od 100 to (6.) program zwraca aktualną liczbę skoków. W przeciwnym razie (7.) skok zostaje wykonany. (9.) Jeśli pętla nie zostanie przerwana to znaczy, że zostanie wykonanych tyle skoków ile schodków.

C++
C#
  1. static int first_jump_height(int a) {
  2.   return ((100 - a) * 2 + 1);
  3. }

Funkcja first_jump_height() to zapisany w kodzie wzór