Pokazywanie postów oznaczonych etykietą zadania z algorytmiki. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą zadania z algorytmiki. Pokaż wszystkie posty

środa, 21 marca 2018

00035 - 617 - StringMerge - www.pl.spoj.com

Treść zadania:

Napisz funkcję:

char* string_merge(char *, char *);


która sklei ze sobą dwa łańcuchy biorąc na przemian po jednym znaku z każdego łańcucha i umieści w nowej dynamicznie alokowanej tablicy znaków, do której zwróci wskaźnik. Należy wziąć po tyle znaków ile jest w krótszym łańcuchu.

Input
W pierwszej linii liczba testów t, w kolejnych liniach po dwa łańcuchy znaków odzielone spacją.

Output
W każdej linii jeden łańcuch, wynik działania funkcji string_merge.

Example

Input:
4
a bb
abs sfd
ewr w
wqeqweqweq eqweqwe

Output:
ab
asbfsd
ew
weqqewqewqewqe


Kod źródłowy w C++:
#include <iostream>
#include <cstring>

#define T_SIZE 1001

using namespace std;

char* string_merge(char *a, char *b)
{
    int i, c;
    i=0;
    c=0;
    char *s = new char [10000];
    while(a[i] != '\0' && b[i] !=  '\0')
    {
        s[c]=a[i];
        ++c;
        s[c]=b[i];
        ++c;
        ++i;
    }
    s[c]='\0';
    return s;
};

int main()
{
    int t, n;
    char S1[T_SIZE], S2[T_SIZE], *S;
    cin >> t; /* wczytaj liczbę testów */
    cin.getline(S1,T_SIZE);
    while(t)
    {
        cin.getline(S1,T_SIZE,' ');
        cin.getline(S2,T_SIZE);
        S=string_merge(S1,S2);
        cout << S << endl;
        delete[] S;
        t--;
    }
    return 0;
}



Źródło: http://pl.spoj.com/problems/PP0504B/

poniedziałek, 19 marca 2018

00034 - 1300 - Szyfr Cezara - www.pl.spoj.com

Treść zadania:

Szyfr Cezara jest to szyfr za pomocą, którego Juliusz Cezar szyfrował swoje listy do Cycerona. Jako ciekawostkę można podać, że szyfr ten był podobno używany jeszcze w 1915 roku w armii rosyjskiej, gdyż tylko tak prosty szyfr wydawał się zrozumiały dla sztabowców.

Każdą literę tekstu jawnego zamieniamy na literę przesuniętą o 3 miejsca w prawo. I tak literę A szyfrujemy jako literę D, literę B jako E itd. W przypadku litery Z wybieramy literę C. W celu odszyfrowania tekstu powtarzamy operację tym razem przesuwając litery o 3 pozycje w lewo.

Input
Na wejściu pojawi się tekst zawierający jedynie wielkie litery alfabetu łacińskiego, spacje oraz znaki nowej linii, a jego długość nie przekracza 200 znaków.

Output
Na wyjściu otrzymujemy zaszyfrowany tekst używając Szyfru Cezara.

Example

Input:
ABC DEF
TERA EST ROTUNDA

Output:
DEF GHI
WHUD HVW URWXQGD


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char c;
    for(;scanf("%c",&c)==1;)
    {
        if(c<='Z' && c>='A')
        {
            if(c>'W')
            {
                printf("%c",c-23);
            }
            else
            {
                printf("%c",c+3);
            }
        }
        else
        {
            printf("%c",c);
        }
    }
    return 0;
}



Kod źródłowy w C++:
#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    char c;
    for(;scanf("%c",&c)==1;)
    {
        if(c<='Z' && c>='A')
        {
            if(c>'W')
            {
                printf("%c",c-23);
            }
            else
            {
                printf("%c",c+3);
            }
        }
        else
        {
            printf("%c",c);
        }
    }
    return 0;
}



Źródło: http://pl.spoj.com/problems/JSZYCER/

środa, 14 marca 2018

00033 - 1910 - Odwracanie wyrazów - www.pl.spoj.com

Treść zadania:

Napisz program, który zapisuje wspak podane na wejściu wyrazy.

Wejście
Na wejście programu podana zostanie pewna nieokreślona ilość wyrazów, tj. ciągów znaków zbudowanych z małych liter. Poszczególne wyrazy zostaną rozdzielone znakiem nowej linii. Przyjmujemy, że długość wyrazów nie przekracza 1000 znaków.

Wyjście
Na wyjściu mają się pojawić te same wyrazy, które pojawiły się na wejściu, ale zapisane wspak. Poszczególne wyrazy należy rozdzielić znakiem nowej linii.

Przykład

Wejście:
alfa
beta
gamma

Wyjście:
afla
ateb
ammag


Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int i;
    char input[1000];
    for(;cin>>input;)
    {
        for(i=0;input[i]!='\0';++i)
        {

        }
        --i;
        for(i;i!=-1;--i)
        {
            cout<<input[i];
        }
        cout<<endl;
    }
    return 0;
}



Źródło: http://pl.spoj.com/problems/KC009/

poniedziałek, 12 marca 2018

00032 - 4138 - Harry and big doughnuts - www.pl.spoj.com

Treść zadania:

Młody Harry został poproszony o kupienie karmy dla kotów przez swoją sąsiadkę - starą, dziwną panią, która była właścicielką wielu kotów. Ale koty też były dziwne i jadały tylko pączki. Toteż sąsiadka chciała aby Harry przyniósł jej dokładnie po jednym pączku dla każdego kota - a posiadała ich c. Harry miał ze sobą plecak, ale że był tylko małym chłopcem, potrafił udźwignąć jedynie k kilogramów. Harry wiedział, że każdy pączek waży w kilogramów (duże koty, duże pączki). Pomóż Harremu zdecydować czy powinien iść do supermarketu i kupić żarcie, czy się po prostu poddać i pomarzyć o odrobinie magii...

Wejście
W pierwszej linii jedna dodatnia liczba całkowita t (t <= 100) oznaczająca ilość testów (Harry został poproszony o kupno pączków kilka razy). Następnie t linii, każda zawierająca 3 liczby: c, k oraz w (1 <= c, k, w <= 100)

t [liczba testów]
c k w [liczba kotów, udźwig Harrego oraz waga pączka]
c k w [następny test]
...

Wyjście
t linii zawierających słowo "yes" jeśli Harry jest w stanie wykonać zadanie lub "no" jeśli pączki złamałyby Harremu kręgosłup.

Przykład

Wejście:
3
5 15 3
1 5 4
13 25 2

Wyjście:
yes
yes
no


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int t, c, k, w, i;
    scanf("%d",&t);
    for(i=0;i<t;++i)
    {
        scanf("%d%d%d",&c,&k,&w);
        if((w*c)<=k)
        {
            printf("yes\n");
        }
        else
        {
            printf("no\n");
        }
    }
    return 0;
}



Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int t, c, k, w;
    cin>>t;
    for(int i=0;i<t;++i)
    {
        cin>>c>>k>>w;
        if((w*c)<=k)
        {
            cout<<"yes"<<endl;
        }
        else
        {
            cout<<"no"<<endl;
        }
    }
    return 0;
}



Źródło: http://pl.spoj.com/problems/DOUGHNUT/

środa, 7 marca 2018

00031 - 1042 - Test 3 - www.pl.spoj.com

Treść zadania:

Przepisz dane z wejścia na wyjście. Dane wejściowe są dwucyfrowymi liczbami naturalnymi. Zakończ działanie programu, gdy na wejściu pojawi się, trzecia liczba 42 poprzedzona jakąkolwiek inną liczbą, różną od 42.

Wejście
W każdej linii jedna liczba dwucyfrowa.

Wyjście
W każdej linii jedna liczba dwucyfrowa. Odczytane wartości 42 również powinny się pojawić.

Przykład

Wejście:
42
42
12
13
42
11
42
43
42
42
99
01

Wyjście:
42
42
12
13
42
11
42
43
42


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int a, b, c=0;
    scanf("%d",&b);
    printf("%d\n",b);
    for(;;)
    {
        scanf("%d",&a);
        if(a==42 && b != 42)
        {
            ++c;
        }
        printf("%d\n",a);
        b=a;
        if(c==3)
        {
            break;
        }
    }
    return 0;
}



Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int a, b, c=0;
    cin>>b;
    cout<<b<<endl;
    for(;;)
    {
        cin>>a;
        if(a==42 && b != 42)
        {
            ++c;
        }
        cout<<a<<endl;
        b=a;
        if(c==3)
        {
            break;
        }
    }
    return 0;
}



Źródło: http://pl.spoj.com/problems/PP0601A2/

poniedziałek, 5 marca 2018

00030 - 1042 - Transponowanie macierzy - www.pl.spoj.com

Treść zadania:

Transponuj podaną macierz.

Wejście
W pierwszym wierszu znajdują się dwie liczby m n (1<=m,n<=200) oznaczające odpowiednio liczbę wierszy oraz liczbę kolumn. Następnie następuje m wierszy, w każdym n liczb.

Wyjście
Na wyjściu powinna znaleźć się macierz transponowana do zadanej

Przykład

Wejście:
4 3
1 2 5
4 3 3
3 4 9
8 7 7

Wyjście:
1 4 3 8
2 3 4 7
5 3 9 7


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m, n, i, j;
    int tab [200][200];

    scanf("%d%d",&m,&n);

    for(i=0;i<m;++i)
    {
        for(j=0;j<n;++j)
        {
            scanf("%d",&tab[i][j]);
        }
    }
    for(i=0;i<n;++i)
    {
        for(j=0;j<m;++j)
        {
            printf("%d ",tab[j][i]);
        }
        printf("\n");
    }
    return 0;
}



Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int m, n, i, j;
    int tab [200][200];

 cin>>m>>n;
 
    for(i=0;i<m;++i)
    {
        for(j=0;j<n;++j)
        {
            cin>>tab[i][j];
        }
    }
    for(i=0;i<n;++i)
    {
        for(j=0;j<m;++j)
        {
            cout<<tab[j][i]<<" ";
        }
        cout<<endl;
    }
    return 0;
}



Źródło: http://pl.spoj.com/problems/TRN/

środa, 28 lutego 2018

00029 - 1830 - Nierówność trójkąta - www.pl.spoj.com

Treść zadania:

Napisz program, który sprawdza, czy istnieje trójkąt o bokach o podanej długości.

Wejście
Na wejście programu podana zostanie pewna nieokreślona liczba zestawów danych. Każdy z zestawów składa się z 3 liczb rozdzielonych spacjami. Poszczególne zestawy zostaną rozdzielone znakiem nowej linii.

Wyjście
Na wyjściu ma się pojawić ciąg binarny, którego i-ty wyraz jest równy 1, jeżeli istnieje trójkąt o długościach boków podanych w i-tym wczytanym z wejścia zestawie. Poszczególne elementy tego ciągu należy rozdzielić znakiem nowej linii.

Przykład

Wejście:
1.2 1.2 1.2
1.5 2.5 3.5
-1.5 6.0 4.5
2 4 8

Wyjście:
1
1
0
0


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    double a, b, c;
    for(;scanf("%lf%lf%lf",&a,&b,&c)!=EOF;)
    {
        if((a+b)>c && (a+c)>b && (b+c)>a && a>0 && b>0 && c>0)
        {
            printf("1\n");
        }
        else
        {
            printf("0\n");
        }
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    double a, b, c;
    for(;cin>>a>>b>>c;)
    {
        if((a+b)>c && (a+c)>b && (b+c)>a && a>0 && b>0 && c>0)
        {
            cout<<1<<endl;
        }
        else
        {
            cout<<0<<endl;
        }
    }
    return 0;
}



Źródło: http://pl.spoj.com/problems/KC003/

poniedziałek, 26 lutego 2018

00028 - 998 - Kalkulator 2 - www.pl.spoj.com

Treść zadania:

Napisz program, który działa jak prosty kalkulator z pamięcią obsługujący pięć operacji: dodawanie, odejmowanie, mnożenie, dzielenie i obliczanie reszty z dzielenia liczb całkowitych. Przyjmujemy, że nasz kalkulator ma w pamięci 10 rejestrów o numerach 0 - 9 oraz że wszystkie rejestry zawierają na początku zera.

Wejście
Na wejście programu podana zostanie pewna nieokreślona liczba zestawów danych. Zestawy składają się z jednoznakowego symbolu operacji do wykonania (+, -, *, /, % i z) oraz następujących po nim dwóch liczb całkowitych.

Wyjście
Na wyjściu programu ma się pojawić ciąg liczb będących rezultatem wykonania pojawiających się na wejściu poleceń. Poszczególne liczby należy rozdzielić znakami nowej linii. To, co należy wykonać, zależy od symbolu operacji. Symbole +, -, *, / i % nakazują wykonanie odpowiednio dodawania, odejmowania, mnożenia, dzielenia i obliczenia reszty z dzielenia liczb, które są przechowywane w rejestrach o podanych numerach. Symbol z nakazuje zapis wartości podanej jako drugi argument w rejestrze o numerze podanym jako pierwszy argument. (Po wykonaniu tej operacji nie trzeba nic wyświetlać). Uwaga! Można założyć, że dane wejściowe nie zawierają polecenia dzielenia przez 0.

Przykład

Wejście:
z 3 6
z 1 89
z 2 60
z 0 11
+ 0 1
- 1 2
* 2 3
/ 3 0
% 3 1

Wyjście:
100
29
360
0
6


Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    unsigned short int r[9];
    int q, w;
    char o;
    for(;cin>>o>>q>>w;)
    {
        --q;
        switch(o)
        {
            case 'z':
                r[q]=w;
            break;

            case '+':
                cout<<r[q]+r[w-1]<<endl;
            break;

            case '-':
                cout<<r[q]-r[w-1]<<endl;
            break;

            case '*':
                cout<<r[q]*r[w-1]<<endl;
            break;

            case '/':
                cout<<r[q]/r[w-1]<<endl;
            break;

            case '%':
                cout<<r[q]%r[w-1]<<endl;
            break;
        }

    }
    return 0;
}



Źródło: http://pl.spoj.com/problems/CALC2/

środa, 21 lutego 2018

00027 - 708 - Problem Collatza - www.pl.spoj.com

Treść zadania:

Dany jest ciąg xn określony rekurencyjnie:
x0=s,
xn+1=3*xn+1, jeśli xn jest nieparzyste i
xn+1=xn/2, jeśli xn jest parzyste

Napisz program, który oblicza pierwsze takie n, dla którego xn=1.

Wejście
W pierwszej linii liczba testów t. W każdym z t kolejnych wierszy
jedna liczba całkowita s, 1 <= s <= 10000.

Wyjście
W każdej linii jedna liczba - obliczona wartość n.

Przykład

Wejście:
5
1
2
8
3
567

Wyjście:
0
1
3
7
61


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int t, s, c;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&s);
        c=0;
        for(;;)
        {
            if(s==1)
            {
                break;
            }
            ++c;
            if(s%2==0)
            {
                s=s/2;
            }
            else
            {
                s=(3*s)+1;
            }
        }
        printf("%d\n",c);
    }
    return 0;
}



Kod źródło w C++:
#include <iostream>

using namespace std;

int main()
{
    int t, s, c;
    cin>>t;
    while(t--)
    {
        cin>>s;
        c=0;
        for(;;)
        {
            if(s==1)
            {
                break;
            }
            ++c;
            if(s%2==0)
            {
                s=s/2;
            }
            else
            {
                s=(3*s)+1;
            }
        }
        cout<<c<<endl;
    }
    return 0;
}


Źródło: http://pl.spoj.com/problems/PTCLTZ/

poniedziałek, 19 lutego 2018

00026 - 1262 - ROL (k) - www.pl.spoj.com

Treść zadania:

Przesuń elementy tablicy cyklicznie w lewo o zadaną liczbę miejsc.

Input
Najpierw dwie liczby n i k takie, że 1 < k < n < 10000, a następnie w kolejnym wierszu n liczb.

Output
W jednym wierszu n liczb w zmienionym porządku (przesuniętych cyklicznie o k miejsc).

Example

Input:
5 3
1 2 3 4 5

Output:
4 5 1 2 3


Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, k, i;
    int tab[10000];
    scanf("%d%d",&n,&k);
    for(i=0; i<n; ++i)
    {
        scanf("%d",&tab[i]);
    }
    for(i=k; i<n; ++i)
    {
        printf("%d ",tab[i]);
    }
    for(i=0; i<k; ++i)
    {
        printf("%d ",tab[i]);
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int n, k, i;
    int tab[10000];
    cin>>n>>k;
    for(i=0; i<n; ++i)
    {
        cin>>tab[i];
    }
    for(i=k; i<n; ++i)
    {
        cout<<tab[i]<<" ";
    }
    for(i=0; i<k; ++i)
    {
        cout<<tab[i]<<" ";
    }
    return 0;
}



Źródło: http://pl.spoj.com/problems/PP0602D/

czwartek, 15 lutego 2018

Program Kwiaciarnia - programowanie obiektowe

Treść zadania:

Napisać program, w którym zostaną zdefiniowane trzy klasy zgodnie z poniższym opisem:

Klasy:
• "Kwiat", zawiera dane prywatne: identyfikator rośliny, nazwa, typ ( cięte pojedyncze, doniczkowe, wiązanki, do zasadzenia);
• "Kwiaciarnia", zawiera dane prywatne: identyfikator kwiaciarni, adres (np. nazwa ulicy);
• "Stan", zawiera dane prywatne: identyfikator kwiaciarni; identyfikator rośliny, liczba sztuk;

Każda klasa powinna posiadać publiczne metody umożliwiające operowanie na jej prywatnych danych, w tym publiczne konstruktory nadające wartości danym.

Program powinien.
1. Zapisywać do plików dane z obiektów powyższych klas oraz odczytywać dane z plików do obiektów odpowiednich klas;
2. Wyświetlać:
    a) listę dostępnych typów dla rośliny (kwiatu) o wskazanej nazwie;
    b) liczbę sztuk doniczkowych róż znajdujących się w kwiaciarni o danym adresie;
    c) listę kwiaciarni (adresy) posiadających w sprzedaży przynajmniej jedną wiązankę z rośliną o podanej nazwie.


Kod źródłowy w C++:
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string.h>

using namespace std;

void menu();
void dodaj_kwiat();
void dodaj_stan();
void odczytywanie_danych();
void zadanie_2_a();
void zadanie_2_b();
void zadanie_2_c();

class kwiat
{
    private:
        string nazwa_rosliny,typ_rosliny;
        int id_rosliny;

    public:
        kwiat()
        {
            nazwa_rosliny="";
            typ_rosliny="";
            id_rosliny=(-1);
        }

        kwiat(int id_rosliny,string typ_rosliny,string nazwa_rosliny)
        {
            this->id_rosliny=id_rosliny;
            this->typ_rosliny=typ_rosliny;
            this->nazwa_rosliny=nazwa_rosliny;
        }

        int daj_id_rosliny()
        {
            return id_rosliny;
        }

        string daj_typ_rosliny()
        {
            return typ_rosliny;
        }

        string daj_nazwe_rosliny()
        {
            return nazwa_rosliny;
        }
};

class kwiaciarnia
{
    private:
        string adres_kwiaciarni;
        int id_kwiaciarni;

    public:
        kwiaciarnia()
        {
            id_kwiaciarni=1;
            adres_kwiaciarni="Warszawska 4";
        }

        kwiaciarnia(int id_kwiaciarni,string adres_kwiaciarni)
        {
            this->id_kwiaciarni=id_kwiaciarni;
            this->adres_kwiaciarni=adres_kwiaciarni;
        }

        int daj_id_kwiaciarni()
        {
            return id_kwiaciarni;
        }

        string daj_adres_kwiaciarni()
        {
            return adres_kwiaciarni;
        }
};

class stan
{
    private:
        int id_kwiaciarni;
        int id_rosliny;
        int liczba_sztuk;

    public:
        stan()
        {
            id_kwiaciarni=1;
            id_rosliny=1;
            liczba_sztuk=2;
        }

        stan(int id_kwiaciarni,int id_rosliny,int liczba_sztuk)
        {
            this->id_kwiaciarni=id_kwiaciarni;
            this->id_rosliny=id_rosliny;
            this->liczba_sztuk=liczba_sztuk;
        }

        int daj_id_rosliny()
        {
            return id_rosliny;
        }

        int daj_id_kwiaciarni()
        {
            return id_kwiaciarni;
        }

        int daj_liczbe_sztuk()
        {
            return liczba_sztuk;
        }
};

// Kwiacairnia
kwiaciarnia tk[100];
int liczba_kwiaciarnia=0;
int liczba_kwiaciarnia1=0;
string adres_k;
int id_k;
int id_kwiaciarni;
string adres_kwiaciarni;
// Kwiat
kwiat tr[100];
int liczba_kwiat=0;
int liczba_kwiat1=0;
string nazwa_r;
string typ_r;
int id_r;
// Stan
int ilosc;
stan ts[100];
int liczba_stan=0;
int liczba_stan1=0;


void dodaj_kwiaciarnie()
{
    cout<<endl<<"Podaj id kwiaciarni: ";
    cin>>id_kwiaciarni;
    cout<<endl<<"Podaj adres kwiaciarni ";
    cin>>adres_kwiaciarni;
    system("cls");
    cout<<"Dane wprowadzono poprawnie."<<endl<<"Wprowadzone dane to: "<<id_kwiaciarni<<" "<<adres_kwiaciarni<<"."<<endl;

    kwiaciarnia tmp(id_kwiaciarni,adres_kwiaciarni);
 tk[liczba_kwiaciarnia]=tmp;
 liczba_kwiaciarnia++;

 ofstream dopliku2("kwiaciarnia.txt",ios_base::app);
 for(int i=liczba_kwiaciarnia1;i<liczba_kwiaciarnia;i++)
 {
  dopliku2<<tk[i].daj_id_kwiaciarni()<<" "<<tk[i].daj_adres_kwiaciarni()<<endl;
 }
 dopliku2.close();

    system("pause");
    system("cls");
    menu();
}

void dodaj_kwiat()
{
 liczba_kwiat1=liczba_kwiat;
 cout<<endl<<"podaj id rosliny: ";
 cin>>id_r;
 cout<<endl<<"podaj typ rosliny ";
 cin>>typ_r;
 cout<<endl<<"podaj nazwe rosliny ";
 cin>>nazwa_r;
 kwiat tmp(id_r,typ_r,nazwa_r);
 tr[liczba_kwiat]=tmp;
 liczba_kwiat++;

 ofstream dopliku("kwiat.txt",ios_base::app);
 for(int i=liczba_kwiat1;i<liczba_kwiat;i++)
 {
  dopliku<<tr[i].daj_id_rosliny()<<" "<<tr[i].daj_typ_rosliny()<<" "<<tr[i].daj_nazwe_rosliny()<<endl;
 }
 dopliku.close();

    system("pause");
    system("cls");
    menu();
}

void dodaj_stan()
{
 cout<<endl<<"podaj id kwiaciarni: ";
 cin>>id_k;
 cout<<endl<<"podaj id rosliny ";
 cin>>id_r;
 cout<<endl<<"podaj ilosc ";
 cin>>ilosc;
 stan tmp(id_k,id_r,ilosc);
 ts[liczba_stan]=tmp;
 liczba_stan++;

 ofstream dopliku3("stan.txt",ios_base::app);
 for(int i=liczba_stan1;i<liczba_stan;i++)
 {
  dopliku3<<ts[i].daj_id_kwiaciarni()<<" "<<ts[i].daj_id_rosliny()<<" "<<ts[i].daj_liczbe_sztuk()<<endl;
 }
 dopliku3.close();

 system("pause");
    system("cls");
    menu();
}

wyswietl_kwiaciarnie()
{
 for(int i=0;i<liczba_kwiaciarnia;i++)
 {
        cout<<"\nid kwiaciarni: "<<tk[i].daj_id_kwiaciarni()<<" ";
        cout<<"adres kwiaciarni: "<<tk[i].daj_adres_kwiaciarni();
 }
 cout<<endl;
 system("pause");
 system("cls");
 menu();
}

wyswietl_kwiat()
{
 for(int i=0;i<liczba_kwiat;i++)
 {
        cout<<endl<<"id rosliny: "<<tr[i].daj_id_rosliny()<<" ";
        cout<<"typ: "<<tr[i].daj_typ_rosliny()<<" ";
        cout<<"nazwa: "<<tr[i].daj_nazwe_rosliny();
 }
 cout<<endl;
 system("pause");
 system("cls");
 menu();
}

wyswietl_stan()
{
 for(int i=0;i<liczba_stan;i++)
 {
  cout<<endl<<"Id kwiaciarni: "<<ts[i].daj_id_kwiaciarni()<<" ";
  cout<<"Id rosliny: "<<ts[i].daj_id_rosliny()<<" ";
  cout<<"Ilosc: "<<ts[i].daj_liczbe_sztuk();
 }
 cout<<endl;
 system("pause");
 system("cls");
 menu();
}

void zadanie_2_a()
{
 string typy[100];
 string nazwa_rosliny;

 cout<<"Tresc zadania:"<<endl;
 cout<<"Wyswietl liste dostepnych typow dla rosliny (kwiatu) o wskazanej nazwie."<<endl<<endl;
 cout<<"Podaj nazwe rosliny: "<<endl;
 cin>>nazwa_rosliny;

 for(int i=0; i<100; ++i)
 {
        if(nazwa_rosliny==tr[i].daj_nazwe_rosliny())
        {
            typy[i]=tr[i].daj_typ_rosliny();
        }
        else
        {
            typy[i]="0";
        }
 }

 cout<<"Lista typow rosliny dla "<<nazwa_rosliny<<":"<<endl;

 for (int i=0; i<100; ++i)
 {
  if(typy[i]!="0")
  {
            cout<<typy[i]<<endl;
  }
 }

 system("pause");
 system("cls");
 menu();
}

void zadanie_2_b()
{
 float wartosc=0;
 int ididr=0;
 int ididkw=0;
 string nazwa;

 cout<<"Tresc zadania:"<<endl;
 cout<<"Wyswietl liczbe sztuk doniczkowych roz znajdujacych sie w kwiaciarni o danym adresie."<<endl<<endl;
 cout<<"Podaj adres kwiaciarni aby  pokazac ilosc roz doniczkowych :";
 cin>>nazwa;

 for(int i=0;i<liczba_kwiaciarnia;i++)
 {
  if(tk[i].daj_adres_kwiaciarni()==nazwa)
  {
   ididkw=tk[i].daj_id_kwiaciarni();
  }
 }

  for(int i=0;i<liczba_kwiat;i++)
 {
     if((tr[i].daj_typ_rosliny()=="doniczkowa")&&(tr[i].daj_nazwe_rosliny()=="roza"))
  {
       ididr=tr[i].daj_id_rosliny();
      for(int j=0;j<liczba_stan;j++)
      {
       if((ts[j].daj_id_kwiaciarni()==ididkw)&&(ts[j].daj_id_rosliny()==ididr))
          {
     wartosc=wartosc+ts[j].daj_liczbe_sztuk();
    }
         }
  }
 }
 cout<<"W kwiaciarni o adresie: "<<nazwa<<" znajduje sie: "<<wartosc<<" sztuk roz doniczkowych"<<endl;
 system("pause");
 system("cls");
 menu();
}

void zadanie_2_c()
{
 cout<<"Tresc zadania:"<<endl;
 cout<<"Wyswietl liste kwiaciarni (adresy) posiadajacych w sprzedazy przynajmniej jedna wiazanke z roslin o podanej nazwie."<<endl;
 cout<<endl<<endl;
 int ididr=0;
 int ididkw=0;
 string nazwa_rosliny;
 cout<<"Podaj nazwe rosliny:"<<endl;
 cin>>nazwa_rosliny;

 for(int i=0;i<liczba_kwiat;i++)
 {
  if((tr[i].daj_typ_rosliny()=="wiazanka")&&(tr[i].daj_nazwe_rosliny()==nazwa_rosliny))
  {
   ididr=tr[i].daj_id_rosliny();
   for(int j=0;j<liczba_stan;j++)
   {
    if((ts[j].daj_id_rosliny()==ididr)&&(ts[j].daj_liczbe_sztuk()>=1))
    {
     ididkw=ts[j].daj_id_kwiaciarni();
     for(int k=0;k<liczba_kwiaciarnia;k++)
     {
      if(tk[k].daj_id_kwiaciarni()==ididkw)
      {
       cout<<tk[k].daj_adres_kwiaciarni()<<" "<<endl;
      }
     }
    }
   }
  }
 }
 cout<<endl;
 system("pause");
 system("cls");
 menu();
}

void odczytywanie_danych()
{
    int s;
    cout << "\n +----------------------------+"<< endl;
    cout << " |     Program Kwiaciarnia    |"<< endl;
    cout << " |     Odczytywanie danych    |"<< endl;
    cout << " |                            |"<< endl;
    cout << " |  1 - Wyswietl kwiacairnie  |"<< endl;
    cout << " |  2 - Wyswietl kwiaty       |"<< endl;
    cout << " |  3 - Wyswietl stan         |"<< endl;
    cout << " |  4 - Zadanie 2 a)          |"<< endl;
    cout << " |  5 - Zadanie 2 b)          |"<< endl;
    cout << " |  6 - Zadanie 2 c)          |"<< endl;
    cout << " |  7 - Cofnij                |"<< endl;
    cout << " +----------------------------+"<< endl;

    cin >> s;
    system("cls");
    switch(s)
    {
        case 1:
            wyswietl_kwiaciarnie();
            break;

        case 2:
            wyswietl_kwiat();
            break;

        case 3:
            wyswietl_stan();
            break;

        case 4:
            zadanie_2_a();
            break;

        case 5:
            zadanie_2_b();
            break;

        case 6:
            zadanie_2_c();
            break;

        case 7:
            menu();
            break;
    }
}

void wprowadzanie_danych()
{
    int s;
    cout << "\n +----------------------------+"<< endl;
    cout << " |     Program Kwiaciarnia    |"<< endl;
    cout << " |     Wprowadzanie danych    |"<< endl;
    cout << " |                            |"<< endl;
    cout << " |  1 - Dodaj kwiaciarnie     |"<< endl;
    cout << " |  2 - Dodaj kwiat           |"<< endl;
    cout << " |  3 - Dodaj stan            |"<< endl;
    cout << " |  4 - Cofnij                |"<< endl;
    cout << " +----------------------------+"<< endl;
    cin >> s;
    system("cls");
    switch(s)
    {
        case 1:
            dodaj_kwiaciarnie();
            break;

        case 2:
            dodaj_kwiat();
            break;

        case 3:
            dodaj_stan();

        case 4:
            menu();
            break;
    }
}

void menu()
{
    int s;
    cout << endl;
    cout << " +----------------------------+"<< endl;
    cout << " |     Program Kwiaciarnia    |"<< endl;
    cout << " |                            |"<< endl;
    cout << " |  1 - Wprowadzanie danych   |"<< endl;
    cout << " |  2 - Odczytywanie danych   |"<< endl;
    cout << " |  3 - Koniec                |"<< endl;
    cout << " +----------------------------+"<< endl;
    cin >> s;
    system("cls");
    switch(s)
    {
        case 1:
            wprowadzanie_danych();
            break;

        case 2:
            odczytywanie_danych();
            break;

        case 3:
            system("exit");
            break;
    }
}

int main()
{
 ifstream zpliku("kwiat.txt");

 for(;;)
 {
  if(!(zpliku>>id_r))
  break;
  zpliku>>typ_r>>nazwa_r;
  kwiat tmp(id_r,typ_r,nazwa_r);
  tr[liczba_kwiat]=tmp;
  liczba_kwiat++;
 }

 ifstream zpliku2("kwiaciarnia.txt");
 for(;;)
    {
  if(!(zpliku2>>id_k))
  break;
  zpliku2>>adres_k;
  kwiaciarnia tmp(id_k,adres_k);
  tk[liczba_kwiaciarnia]=tmp;
  liczba_kwiaciarnia++;
 }

 ifstream zpliku3("stan.txt");
 for(;;)
 {
  if(!(zpliku3>>id_k))
  break;
  zpliku3>>id_r>>ilosc;
  stan tmp(id_k,id_r,ilosc);
  ts[liczba_stan]=tmp;
  liczba_stan++;
 }

 menu();
}



Zawartość pliku kwiaciarnia.txt:
1 Warszawska_5
2 Al_Tysiaclecia_43
3 Dzialkowa_27
4 Klemensiewicza_54
5 Osiedlowa_102
6 Wrzosowa_91
7 Wolska_33
8 Lesna_1
9 Bajkowa_56
10 Hallera_8
11 Sarenki_84
12 Mar_Jozefa_Pildsuckiego_27
13 Zielona_3
14 Gorzysta_20
15 Husarska_37
16 Domaniewska_76
17 Adama_Mickiewicza_10
18 Sosnowa_40
19 Podlesna_39
20 Sportowa_83



Zawartość pliku kwiat.txt:
1 wiazanka roza
2 doniczkowa storczyk
3 bukiet tulipan
4 doniczkowa fiolki
5 doniczkowa hiacynt
6 bukiet niezapominajka
7 doniczkowa roza
8 bukiet chryzantema
9 doniczkowa kaktus
10 wiazanka chryzantema
11 bukiet mlecz
12 doniczkowa krokus
13 wiazanka lilia
14 wiazanka krokus
15 doniczkowa pelargonia
16 wiazanka tulipan
17 bukiet lilia
18 wiazanka kalia
19 doniczkowa zonkil
20 bukiet roza
21 do_zasadzenia krokus
22 ciete_pojedyncze roza
23 do_zasadzenia kaktus
24 do_zasadzenia tulipan
25 do_zasadzenia fiolki
26 do_zasadzenia storczyk
27 ciete_pojedyncze mlecz
28 do_zasadzenia chryzantema
29 do_zasadzenia roza
30 ciete_pojedyncze storczyk




Zawartość pliku stan.txt:
1 1 33
1 1 33
1 15 2
1 14 63
2 17 32
2 11 43
2 6 23
2 1 43
2 13 21
2 8 23
5 2 53
3 6 23
2 8 34
5 12 63
1 20 12
6 20 43
5 3 63
2 1 63
5 3 53
15 16 44
18 13 74
20 12 63
12 6 23
3 8 23
4 9 43
7 6 34
1 20 5
10 4 32
13 6 32
17 10 23
1 7 43
15 1 11
17 1 10
1 1 2
6 1 7

środa, 14 lutego 2018

00025 - 1228 - Równanie liniowe - www.pl.spoj.com

Treść zadania:

Równanie liniowe jest postaci ax+b=c, gdzie a, b, c są liczbami rzeczywistymi. Niewiadomą jest x, która również jest liczbą rzeczywistą. Równanie to może mieć jedno rozwiązanie, brak rozwiązań lub nieskończenie wiele rozwiązań.

Input
W pojedyńczej linii podane są trzy liczby rzeczywiste zaokrąglone do drugiego miejsca po przecinku.

Output
Rozwiązaniem problemu jest liczba rzeczywista zaokrąglona do drugiego miejsca po przecinku w przypadku, gdy równanie liniowe ax+b=c posiada rozwiązanie. W przypadku braku rozwiązania powinien zostać wydrukowany napis BR, a w przypadku nieskończenie wielu rozwiązań napis NWR


Example 1

Input:
0.52 1.60 -5.44

Output:
-13.54


Example 2

Input:
0.00 2.00 3.00

Output:
BR


Example 3

Input:
0.00 2.00 2.00

Output:
NWR

Kod źródłowy w C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    double a, b, c;
    for(;scanf("%lf%lf%lf",&a,&b,&c)!=EOF;)
    {
        if(a==0 && (c-b)==0)
        {
            printf("NWR");
            continue;
        }
        if(a==0 && (c-b)>0)
        {
            printf("BR");
            continue;
        }
        if((c-b)==0)
        {
            printf("NWR");
            continue;

        }
        else
        {
            printf("%.2lf\n",(c-b)/a);
            continue;
        }
    }
    return 0;
}


Kod źródłowy w C++:
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    double a, b, c;
    for(;cin>>a>>b>>c;)
    {
        if(a==0 && (c-b)==0)
        {
            cout<<"NWR"<<endl;
            continue;
        }
        if(a==0 && (c-b)>0)
        {
            cout<<"BR"<<endl;
            continue;
        }
        if((c-b)==0)
        {
            cout<<"NWR"<<endl;
            continue;

        }
        else
        {
            cout<<fixed;
            cout<<setprecision(2)<<(c-b)/a<<endl;
            continue;
        }
    }
    return 0;
}



Źródło: http://pl.spoj.com/problems/JROWLIN/

poniedziałek, 12 lutego 2018

00024 - 506 - Flamaster - www.pl.spoj.com

Treść zadania:

Kasia niedawno poznała wszystkie literki w szkole. Z wielką pasją potrafiła całe dnie spędzać na pisaniu długich słów swoim ulubionym flamastrem. Pisała i pisała "tasiemce" tak długo, aż flamaster wypisał się. Kasia posmutniała. Z trudem, ale udało jej się uprosić swoją mamę, aby kupiła jej nowy pisak. Musiała jednak obiecać, że tym razem będzie bardziej oszczędna przy jego używaniu żeby wystarczył na dłużej. Kasia zaczęła zastanawiać się w jaki sposób będzie mogła zrealizować obietnicę daną mamie.

Postanowiła, że aby zaoszczędzić wkład flamastra będzie wypisywała skróconą wersję wymyślanych wyrazów. Jeśli miała zamiar napisać więcej niż dwie takie same literki obok siebie w wyrazie, to teraz napisze literkę a następnie liczbę, określającą ilość wystąpień tej literki.

Zadanie
Twoim zadaniem jest dla zadanego wyrazu, który wymyśliła Kasia, podanie skróconej wersji tego wyrazu.

Wejście
W pierwszej linijce wejścia znajduje się liczba naturalna C, 1 ≤ C ≤ 50, oznaczająca ilość zestawów danych. W kolejnych C wierszach wejścia znajdują się zestawy danych. Każdy zestaw składa się z niepustego wyrazu złożonego z samych dużych liter alfabetu amerykańskiego. Długość wyrazu nie przekracza 200 znaków.

Wyjście
Dla każdego zestawu danych, dla zadanego wyrazu, na wyjściu powinna znaleźć się jego skrócona wersja.

Przykład

Dla danych wejściowych:
4
OPSS
ABCDEF
ABBCCCDDDDEEEEEFGGHIIJKKKL
AAAAAAAAAABBBBBBBBBBBBBBBB

prawidłowym rozwiązaniem jest:
OPSS
ABCDEF
ABBC3D4E5FGGHIIJK3L
A10B16


Kod źródłowy w C++:
#include <iostream>

using namespace std;

int main()
{
    int c, q, i;
    char p;
    char input[200];
    cin>>c;
    ++c;
    while(--c)
    {
        cin>>input;
        for(i=0;input[i]!='\0';++i)
        {
            if(input[i]==input[i+1] && input[i+1]==input[i+2])
            {
                p=input[i];
                q=2;
                while(input[i+q]==p)
                {
                    ++q;
                }
                cout<<input[i]<<q;
                i+=q;
                --i;

            }
            else
            {
                cout<<input[i];
            }
        }
        cout<<endl;
    }
    return 0;
}


Kod źródłowy Python 2:
c = int(raw_input(''))
for i in range(0, c, +1):
    strr = raw_input('')
    output = ""
    char = []
    quantity = 0
    char = list(strr)
    if len(char) == 1:
        print str(char[0])
        continue
    for j in range(1, len(char), +1):
        if char[j - 1] == char[j]:
            quantity += 1
            continue
        elif char[j - 1] != char[j] and quantity < 1:
            output += str(char[j - 1])
            quantity = 0
            continue
        elif char[j - 1] != char[j] and quantity == 1:
            output+= str(char[j-1]) + str(char[j-1])
            quantity = 0
            continue
        elif char[j - 1] != char[j] and quantity > 1:
            output += str(char[j - 1]) + str(quantity + 1)
            quantity = 0
            continue
    if j+1 == int(len(char)) and quantity == 0:
        output += str(char[j])
        print output
        continue
    if j+1 == int(len(char)) and quantity == 1:
        output += str(char[j]) + str(char[j])
        print output
        continue
    if j+1 == int(len(char)) and quantity > 1:
        output += str(char[j]) + str(quantity + 1)
        print output
        continue
exit(0)


Kod źródłowy w Python 3:
c = int(input(''))
for i in range(0, c, +1):
    strr = input('')
    output = ""
    char = []
    quantity = 0
    char = list(strr)
    if len(char) == 1:
        print (str(char[0]))
        continue
    for j in range(1, len(char), +1):
        if char[j - 1] == char[j]:
            quantity += 1
            continue
        elif char[j - 1] != char[j] and quantity < 1:
            output += str(char[j - 1])
            quantity = 0
            continue
        elif char[j - 1] != char[j] and quantity == 1:
            output+= str(char[j-1]) + str(char[j-1])
            quantity = 0
            continue
        elif char[j - 1] != char[j] and quantity > 1:
            output += str(char[j - 1]) + str(quantity + 1)
            quantity = 0
            continue
    if j+1 == int(len(char)) and quantity == 0:
        output += str(char[j])
        print (output)
        continue
    if j+1 == int(len(char)) and quantity == 1:
        output += str(char[j]) + str(char[j])
        print (output)
        continue
    if j+1 == int(len(char)) and quantity > 1:
        output += str(char[j]) + str(quantity + 1)
        print (output)
        continue
exit(0)



Źródło: http://pl.spoj.com/problems/FLAMASTE/