Domácí kolo

A: Jízdenky

Řešení (Zadání úlohy)

Jednodušší varianta úlohy se dala snadno řešit i ručně, težší varianta s kalkulačkou a trochou vytrvalosti také. Každopádně postup byl stejný. Když se člověk nad úlohou zamyslí, tak si všimne, že není vůbec důležité, kolik dní bude Týna jezdit, jde jen o to, jestli bude sedmkrát cena jednodenní jízdenky nižší než cena týdenní, protože je každý týden situace stejná – Týna může celý týden jezdít na sedm jednodenních jízdenek, nebo na jednu týdenní. Tyto dvě varianty porovnáme pro jeden týden a tím víme i co je výhodnější pro celý Týnin pobyt v Praze.

Pro náš program využijeme úplně stejnou myšlenku a nebudeme se trápit výpočtem celkové ceny za jízdenky. Nejprve si ale musíme načíst vstup. Nejprve načteme číslo T pro počet problémů, které budeme muset řešit, a uložíme si je do proměnné T.

Abychom prošli každý problém zvlášť, vytvoříme si cyklus for, který bude postupně procházet ceny jízdenek a vypisovat buď jednodenni, nebo tydenni. Pro každý problém si načteme 3 čísla: N (počet dní, kolik bude Týna po Praze jezdit), J (cenu jednodenní jízdenky) a V (cenu jízdenky týdenní). Poté budeme porovnávat 7 * J s V, pokud vyjde 7 * J menší než V, vypíšeme jednodenni, v opačném případě vypíšeme tydenni.

Tento postup můžeme zachytit následujícím pseudokódem:

Algoritmus Jízdenky
  načti počet problémů do proměnné T

  pro každé číslo INDEX od 1 do (T) opakuj
    načti počet dní do proměnné N
    načti cenu jednodenní jízdenky do proměnné J
    načti cenu týdenní jízdenky do proměnné V

    pokud 7*J je menší než V tak
      Vypiš "jednodenni"
    jinak
      Vypiš "tydenni"

Každý z kroků, které provádíme, má konstatní časovou složitost (čtení vstupu, násobení, porovnání i vypsání výstupu) a celková časová složitost úlohy je lineární vzhledem k počtu úloh – pro každý problém z T případů provádíme několik konstantních operací.

Ukázkový program (Python)

t = int(input())
for i in range(t):
  n = int(input())
  j = int(input())
  v = int(input())
  if 7*j < v:
    print("jednodenni")
  else:
    print("tydenni")

Ukázkový program (Pascal)

program jizdenky;

var t,i:integer;
  n,j,v,jednodenni_tyden : longint;
  {pro těžší vstup mohou být čísla větší, proto volíme větší datový typ pro daná čísla}

begin
  readln(t);
  for i:=1 to t do       {opakuje celý program pro každý problém zvlášť}
    begin
      readln(n);
      readln(j);
      readln(v);
      jednodenni_tyden:=j*7;     {výpočet ceny jednodenních jízdenek na týden}
      if jednodenni_tyden < v then   {srovnání ceny 7 jednodenních s cenou týdenní}
      begin
        writeln('jednodenni');
      end
      else
      begin
        writeln('tydenni');    {vypsání levnější variantu}
      end;
    end;
end.

Ukázkový program (C++)

#include <iostream>

using namespace std;
// funkce, kterou potom v main pustíme Tkrát podle počtu problémů:
void solve() {
  unsigned N, J, V; // zadefinování proměnných N,J,V
  cin << N;
  cin << J;
  cin << V;         // načtení N,J,V
  if (7 * J < V)    // porovnání 7*ceny jednodenní jízdenky s týdenní
    cout << "jednodenni" << endl;
  else              // vrátí levnější variantu
    cout <<  "tydenni" <<  endl;
}

int main() {    // hlavní program
  int T;        // zadefinování proměnné T
  cin << T;     // načtení T
  while (T--)   // opakuji pro počet problémů T
    solve();    // zavolání fce definované výše
  return 0;
}

Ukázkový program (JavaScript)

function solve(text)
{
  var radky = text.split('\n');
  var T = radky[0];
  var vystup = "";

  for (var t = 0; t < T; t++)
  {
    var N = radky[t*3 + 1];
    var J = radky[t*3 + 2];
    var V = radky[t*3 + 3];

    if(J*7 < V)
      vystup  += "jednodenni\n";
    else
      vystup += "tydenni\n";
  }

  return vystup;
}

Ukázkový program (Java)

import java.util.Scanner;

public class jizdenky {

  public static void main(String[] args) { // začátek programu
    int t,n,j,v;  // deklarace proměnných t,n,v,j
    Scanner in =new Scanner(System.in);  // nový scanner in na čtení vstupů
    t=in.nextInt();  // načtení T
    for (int i=0;i<t;i++) {  // provede Tkrát
      n = in.nextInt();
      j = in.nextInt();
      v = in.nextInt();  // načtení proměnných n,j,v
      if (7*j<v) {  // porovnání 7násobku ceny jednodenní jízdenky s týdenní
        System.out.println("jednodenni");
      }  // vypsání levnější varianty
      else {
        System.out.println("tydenni");
      }
    }
    in.close();        //zavření scanneru in na čtení vstupů
  }
}

Máš na to!

I ty můžeš vyhrát! Nebo to aspoň zkusit :)