<repo_name>Glifu/PG-Projects<file_sep>/BackpackProblem/ProblemPlecakowyV2/ProblemPlecakowyV2.cpp
﻿// ProblemPlecakowyV2.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
//

#include <iostream>

using namespace std;


int plecaki(int n, int waga[], int wartosc[], int c, int i) {

    int wInc, wExc;
    if (i == n || waga[i] <= 0) {
        return 0;
    }
    if (waga[i] <= c) {
        wInc = plecaki(n, waga, wartosc, c - waga[i], i + 1) + wartosc[i];
        wExc = plecaki(n, waga, wartosc, c, i + 1);
        if (wInc > wExc) {
            return wInc;
        }
        else {
            return wExc;
        }
    }
    else {
        wExc = plecaki(n, waga, wartosc, c, i + 1);
        return wExc;
    }
};



int main()
{

    int iloscAut;
    scanf("%d", &iloscAut);

    for (int a = 0; a < iloscAut; a++) {
        int iloscPrzedmiotow;
        scanf("%d", &iloscPrzedmiotow);
        int zarobek = -20;
        int pojemnosc=1;

        int waga[15];
        int cena[15];
        int stosunek[15];

        for (int i = 0; i < iloscPrzedmiotow; i++) {
            scanf("%d", &cena[i]);
        }
        for (int i = 0; i < iloscPrzedmiotow; i++) {
            scanf("%d", &waga[i]);
            if (waga[i] > 100) {
                cena[i] = cena[i] - 5;
            }
            if (waga[i] == 0 || cena[i] == 0) {
                stosunek[i] = 0;
            }
            else {
                stosunek[i] = waga[i] / cena[i];
            }

        }
        scanf("%d", &pojemnosc);

        for (int i = 0; i < iloscPrzedmiotow; i++) {
            int temp;
            if (waga[i] > pojemnosc) {

                temp = waga[i];
                waga[i] = waga[iloscPrzedmiotow - 1];
                waga[iloscPrzedmiotow - 1] = temp;

                temp = cena[i];
                cena[i] = cena[iloscPrzedmiotow - 1];
                cena[iloscPrzedmiotow - 1] = temp;

                temp = stosunek[i];
                stosunek[i] = stosunek[iloscPrzedmiotow - 1];
                stosunek[iloscPrzedmiotow - 1] = temp;

                iloscPrzedmiotow = iloscPrzedmiotow - 1;
            }
        }

        //Bubble Sort
        if (iloscPrzedmiotow < 0) {
            for (int i = iloscPrzedmiotow; i > 0; i--) {
                int temp;
                for (int j = 0; j < i - 1; j++) {
                    if (stosunek[j] < stosunek[j + 1]) {
                        temp = waga[j];
                        waga[i] = waga[j + 1];
                        waga[j + 1] = temp;

                        temp = cena[j];
                        cena[j] = cena[j + 1];
                        cena[j + 1] = temp;

                        temp = stosunek[j];
                        stosunek[j] = stosunek[j + 1];
                        stosunek[j + 1] = temp;

                        iloscPrzedmiotow = iloscPrzedmiotow - 1;
                    }
                }
            }
        }

        zarobek = zarobek + plecaki(iloscPrzedmiotow, waga, cena, pojemnosc, 0);

        if (zarobek < 0) { 
            zarobek = 0; 
        }
        printf( "%d\n" ,zarobek);
    }
}

// Uruchomienie programu: Ctrl + F5 lub menu Debugowanie > Uruchom bez debugowania
// Debugowanie programu: F5 lub menu Debugowanie > Rozpocznij debugowanie

// Porady dotyczące rozpoczynania pracy:
//   1. Użyj okna Eksploratora rozwiązań, aby dodać pliki i zarządzać nimi
//   2. Użyj okna programu Team Explorer, aby nawiązać połączenie z kontrolą źródła
//   3. Użyj okna Dane wyjściowe, aby sprawdzić dane wyjściowe kompilacji i inne komunikaty
//   4. Użyj okna Lista błędów, aby zobaczyć błędy
//   5. Wybierz pozycję Projekt > Dodaj nowy element, aby utworzyć nowe pliki kodu, lub wybierz pozycję Projekt > Dodaj istniejący element, aby dodać istniejące pliku kodu do projektu
//   6. Aby w przyszłości ponownie otworzyć ten projekt, przejdź do pozycji Plik > Otwórz > Projekt i wybierz plik sln
<file_sep>/BackpackProblem/ProblemPlecakowy/ProblemPlecakowy.cpp
﻿// ProblemPlecakowy.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
//

#include <iostream>
#include <queue>

using namespace std;

struct Przedmiot {
    double waga;           //Waga danego przedmiotu
    double cena;           //Cena danego przedmiotu
    double stosunek;        //Stosunek ceny do Wagi

    void liczStosunek() {
        stosunek = cena / waga;
    }
};



int main()
{
    int iloscAut;
    int iloscPrzedmiotow;
    queue <double> wyniki;
    cin >> iloscAut;

    for (int licznik = 0; licznik < iloscAut; licznik++) {
        double zarobek = 0;
        double udzwigAut = 0;
        Przedmiot A[15];

        zarobek = zarobek - 20;

        cin >> iloscPrzedmiotow;

        for (int i = 0; i < iloscPrzedmiotow; i++) {
            cin >> A[i].cena;
        }

        for (int i = 0; i < iloscPrzedmiotow; i++) {
            cin >> A[i].waga;
        }

        cin >> udzwigAut;

        for (int i = 0; i < iloscPrzedmiotow; i++) {
            if (A[i].waga > 100) {
                A[i].cena = A[i].cena - 5;
            }
            A[i].liczStosunek();
        }

        if (iloscPrzedmiotow > 1) {
            for (int i = iloscPrzedmiotow; i > 0; i--) {
                for (int j = 0; j < i - 1; j++) {
                    if (A[j].stosunek < A[j + 1].stosunek) {
                        swap(A[j], A[j + 1]);

                    }
                }
            }
        }

        for (int i = 0; i < iloscPrzedmiotow; i++) {
            if (udzwigAut - A[i].waga >= 0) {
                zarobek = zarobek + A[i].cena;
                udzwigAut = udzwigAut - A[i].waga;
            }
        }

        if (zarobek < 0) {
            zarobek = 0;
        }
        wyniki.push(zarobek);
    }
    for (int i = 0; i < iloscAut; i++) {
        cout << wyniki.front() << endl;
        wyniki.pop();
    }
}
<file_sep>/SectSim/Sekta/Sekta.KtoraDzialaJakoscpp.cpp
﻿// Sekta.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
//

#include <iostream>
#include <list>

using namespace std;






struct listaCykliczna {
    int data;
    struct listaCykliczna* nastepnik;
};

void lista_next(listaCykliczna* glowa) {
    glowa = glowa->nastepnik;
}

int selekcjaSekty(int k, listaCykliczna* lista, int coDrugi, listaCykliczna* poprzednik = nullptr) {
    int coZostaloWyjebane;
    if (coDrugi % 2 == 1) {     // && k=!0
        coZostaloWyjebane = lista->data;
        poprzednik->nastepnik = lista->nastepnik;
        //usuniecie elementu z listy
        if ( k ==1 || k == 0 ) {
            return coZostaloWyjebane;
        }
    }
    poprzednik = lista;
    //Niezaleznie co sie dzieje idziemy do kolejnego elementu
    if (k != 0) {
        if (coDrugi % 2 == 1) {
            coDrugi++;
            selekcjaSekty(k - 1, lista->nastepnik, coDrugi, poprzednik);
        }
        else {
            coDrugi++;
            selekcjaSekty(k, lista->nastepnik, coDrugi, poprzednik);
        }
    }
 

};

int main()
{
    int iloscWejsc;
    int iloscOsob=11;
    int zgadywanaPozycja=-1;


    //cin >> iloscWejsc;
    //cout << endl;
    //cin >> iloscOsob >> zgadywanaPozycja;

    // Inichjalizacja//
    listaCykliczna* glowa = new listaCykliczna;
    listaCykliczna* poczatek = new listaCykliczna;
    glowa->data = 1;
    glowa->nastepnik = glowa;

    poczatek = glowa;
    

    //listaCykliczna* nowy = new listaCykliczna;
    //nowy->data = 7;
    //nowy->nastepnik = poczatek;
    //glowa->nastepnik = nowy;
    //glowa = nowy;

    //cout << glowa->data;

    //listaCykliczna* nowy2 = new listaCykliczna;
    //nowy2->data = 16;
    //nowy2->nastepnik = poczatek;
    //glowa->nastepnik = nowy2;
    //glowa = nowy2;





    if (zgadywanaPozycja < 0) {                                 //konwersja ujemnej pozycji
        zgadywanaPozycja = (iloscOsob+1)+zgadywanaPozycja;
    }

    for (int i = 2; i <= iloscOsob  ; i++) {                       //zapelnienie kolejki
        listaCykliczna* nowy = new listaCykliczna;
         nowy->data = i;
         nowy->nastepnik = poczatek;
         glowa->nastepnik = nowy;
         glowa = nowy;
    }
    lista_next(glowa);

    glowa = glowa->nastepnik;
    for (int i = 0; i < iloscOsob; i++) {                       //sprawdzenie dzialania kolejki
        cout << glowa->data << endl;
        glowa = glowa->nastepnik;

    }
    cout << selekcjaSekty(zgadywanaPozycja, poczatek, 0);
    //cout << glowa->data;

    //cout << endl << iloscOsob[i] << "  " << zgadywanaPozycja[i];
}

// Uruchomienie programu: Ctrl + F5 lub menu Debugowanie > Uruchom bez debugowania
// Debugowanie programu: F5 lub menu Debugowanie > Rozpocznij debugowanie

// Porady dotyczące rozpoczynania pracy:
//   1. Użyj okna Eksploratora rozwiązań, aby dodać pliki i zarządzać nimi
//   2. Użyj okna programu Team Explorer, aby nawiązać połączenie z kontrolą źródła
//   3. Użyj okna Dane wyjściowe, aby sprawdzić dane wyjściowe kompilacji i inne komunikaty
//   4. Użyj okna Lista błędów, aby zobaczyć błędy
//   5. Wybierz pozycję Projekt > Dodaj nowy element, aby utworzyć nowe pliki kodu, lub wybierz pozycję Projekt > Dodaj istniejący element, aby dodać istniejące pliku kodu do projektu
//   6. Aby w przyszłości ponownie otworzyć ten projekt, przejdź do pozycji Plik > Otwórz > Projekt i wybierz plik sln
<file_sep>/GraphColoring/Grafy_v2/Grafy_v2.cpp
﻿// Grafy.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
//

#include <iostream>

using namespace std;


int main()
{
    //Data Holder
    int graphSize = 0;
    char inputData;

    //For input
    int numberOfInputs;

    //For output
    //int graphGradeCounter = 0;

    std::ios::sync_with_stdio(false);

    cin >> numberOfInputs;


    for (int programCyclces = 0; programCyclces < numberOfInputs; programCyclces++) {

        bool czyCykl = true;
        bool czyPelny = true;
        bool czyNieParzysty = true;
        int zeroCounter = 0;
        int oneCounter = 0;
        cin >> graphSize;
        if (graphSize % 2 == 0) {
            czyNieParzysty = false;
        }
        int graphLongSize = graphSize * graphSize;
        for (int i = 0; i < graphLongSize; i++) {
            cin >> inputData;
            if (inputData == '0' && czyPelny == true) {
                zeroCounter++;
                if (zeroCounter > graphSize) {
                    czyPelny = false;
                }
            }
            else if (inputData == '1') {
                oneCounter++;
            }
            if ((i % graphSize) == (graphSize - 1)) {
                if (oneCounter != 2 && czyPelny == false) {
                    czyCykl = false;
                    cin.ignore(graphLongSize - i);
                    goto TestowaEtykieta;
                }
                else {
                    oneCounter = 0;
                }
            }
        }

            //if (i%graphSize == graphSize-1) {
            //    cout << i << " |  Czy jest cyklem: " << czyCykl << "  Czy jest Pelny: " << czyPelny << " Czy jest nieparzysty: " << graphSize % 2 << endl;
            //}
        TestowaEtykieta:
        if ((czyCykl == 1 && czyNieParzysty == 1) || czyPelny == 1) {
            cout << "True\n";
        }
        else {
            cout << "False\n";
        }
    }
}<file_sep>/BackpackProblem/ProblemPlecakowy_v4/ProblemPlecakowy_v4.cpp
﻿// ProblemPlecakowy_v4.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
//

#include <iostream>

    int weight[15];
    int price[15];


int backPack(int remainingWeight, int indexNumber, int numberOfItems) {
    if (remainingWeight == 0 || indexNumber == numberOfItems) {
        return 0;
    }
    if (weight[indexNumber] > remainingWeight) {
        return backPack(remainingWeight, indexNumber + 1, numberOfItems);
    }
    int wInc, wExc; // weightInclude weightExclude
    wInc = price[indexNumber] + backPack(remainingWeight-weight[indexNumber], indexNumber + 1, numberOfItems);
    wExc = backPack(remainingWeight, indexNumber + 1, numberOfItems);

    if (wInc > wExc) {
        return wInc;
    }
    else {
        return wExc;
    }
};


int main()
{
    int numberOfInputs;
    int numberOfItems;
    int carCapacity;
    int result;


    scanf("%d", &numberOfInputs);

    for (int i = 0; i < numberOfInputs; i++) {
        scanf("%d", &numberOfItems);
        for (int a = 0; a < numberOfItems; a++) {
            scanf("%d", &price[a]);
        }
        for (int a = 0; a < numberOfItems; a++) {
            scanf("%d", &weight[a]);
            if ( weight[a] > 100){
                price[a] = price[a] - 5;
            }
        }
        scanf("%d", &carCapacity);
        int profit = -20;
        profit = profit + backPack(carCapacity, 0, numberOfItems);
        if (profit < 0) {
            profit = 0;
        }
        printf("%d\n", profit);
    }
    
}<file_sep>/WagonProblem/main.cpp
// WagonLista.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
//

#include "pch.h"
#include <iostream>

using namespace std;

struct Wezel {
	int data;
	struct Wezel *next;
};

int main() {
	int n, we, wy=0;
//	int bocznica = 0;
	Wezel *glowa;
	glowa = nullptr;

//	cout << "\nTest adresu: " << glowa << endl;

	cin >> n;



	for (int i = 0; i < (2*n) ;i++) {
		if(i < n) {
			cin >> we;
		}
		else {
			we = NULL;
		}
		

		if ((wy+1) == we && we != NULL) {
			wy = we;
//			cout << "Z wejscia na Wejscie" << endl;
		}
		else if(glowa != nullptr && (wy+1) == glowa->data) {
			wy = glowa->data;
			glowa->data = NULL;
			glowa = glowa->next;
//			cout << "Z bocznicy na Wyjscie;" << endl;
		}
		else if( we != NULL ){
			Wezel *nowy = new Wezel;
			nowy->data = we;         
			nowy->next = glowa;
			glowa = nowy;
//			cout << "\nNa bocznice" << endl;
//			cout << "nowyData: " << nowy->data << "   nowyAdres: " << nowy->next << "    Glowa: " << glowa << endl;
		}
	}
	if (glowa != nullptr) {
//		cout << "Bocznica: " << bocznica << endl;
		cout << "NIE";
	}
	else {
		cout << "TAK";
	}
}

// Uruchomienie programu: Ctrl + F5 lub menu Debugowanie > Uruchom bez debugowania
// Debugowanie programu: F5 lub menu Debugowanie > Rozpocznij debugowanie

// Porady dotyczące rozpoczynania pracy:
//   1. Użyj okna Eksploratora rozwiązań, aby dodać pliki i zarządzać nimi
//   2. Użyj okna programu Team Explorer, aby nawiązać połączenie z kontrolą źródła
//   3. Użyj okna Dane wyjściowe, aby sprawdzić dane wyjściowe kompilacji i inne komunikaty
//   4. Użyj okna Lista błędów, aby zobaczyć błędy
//   5. Wybierz pozycję Projekt > Dodaj nowy element, aby utworzyć nowe pliki kodu, lub wybierz pozycję Projekt > Dodaj istniejący element, aby dodać istniejące pliku kodu do projektu
//   6. Aby w przyszłości ponownie otworzyć ten projekt, przejdź do pozycji Plik > Otwórz > Projekt i wybierz plik sln<file_sep>/README.md
# PG-Projects
Some completed projects, mostly algorythmic problems. (C++)
<file_sep>/BackpackProblem/ProblemPlecakowy_v3/ProblemPlecakowy_v3.cpp
﻿#include <iostream>

using namespace std;

short value[15];
short weight[15];
short tests, n, capacity, result;

short inline max(short n1, short n2)
{
	return n1 > n2 ? n1 : n2;
}

short package(short localWeight, short index = 0)
{
	if (localWeight == 0 || index == n)  return 0;

	if (weight[index] > localWeight) return package(localWeight, index + 1);

	short rightMax = (weight[index] <= 100 ? value[index] : value[index] - 5) + package(localWeight - weight[index], index + 1);
	short leftMax = package(localWeight, index + 1);

	return max(leftMax, rightMax);
}

int main()
{
	scanf("%hi", &tests);

	while (tests--) {

		scanf("%hi", &n);
		for (int i = 0; i < n; i++) {
			scanf("%hi", &value[i]);
		}
		for (int i = 0; i < n; i++) {
			scanf("%hi", &weight[i]);
		}
		scanf("%hi", &capacity);

		result = package(capacity) - 20;

		printf("%i\n", result > 0 ? result : 0);
	}
	return 0;
}<file_sep>/StackMachine/main_v2.cpp
// PoProstu2.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include "pch.h"
#include <iostream>

using namespace std;

struct Wezel {
	int data;
	struct Wezel *next;
};

int main()
{
	char a='d';
	int ia;


	Wezel *glowa;
	glowa = nullptr;
	

	Wezel *temp;

	cout << "\nTest adresu: " << glowa << endl;
	while (a != 'q') {

		cout << "\n\nPodaj wartosc: ";
		cin >> a;
		ia = (int)a - 48;
		Wezel nowy;

		if (0 <= ia && ia <= 9) {
			nowy.data = ia;			//	ia -> int z A,
			nowy.next = glowa;
			glowa = &nowy;
			cout << "Data: " << nowy.data << "   Adres: " << nowy.next << "    Glowa: " << glowa << endl;
		}

		else {
			switch (a)
			{
			case 'r':
				cout << "r - zdjecie ze stosu liczby n, przeniesienie liczby z wierzcholka stosu na n-te miejsce liczac od wierzcholka; 0 r oraz 1 r nic nie robi, 2 r jest tozsame z s, 3 r zamienia 3 2 1 na 2 1 3 itd. ";
				break;

			case 'p':
				cout << "p - wypisanie stosu\n";
				temp = glowa;
				while (temp != nullptr) {
					cout << temp->data << " " ;
					temp = nowy.next;
				}
				break;

			case 's':
				cout << "s - zamiana miejscami dwoch licz na szczyciestosu";
				break;

			case 'x':
				cout << "x - usuniecie liczby z wierzchu stosu";
				break;

			case '+':
				cout << "+ - zdjecie dwoch liczb ze stosu i wlozenie na stos ich sumy";
				break;

			case 'q':
				cout << "Nastapi zakonczenie programu";
				break;

			default:
				break;
			}
		}
		if (glowa == nullptr) {
			cout << "\n**Lista jest pusta**\n";
		}
		else {
			cout << "\nWartosc ostatniego elementu w liscie: " << glowa->data;
		}
		/*
		for (int j = 0; j < n; j++) {
			cout << "Wielkosc elementu " << j << ": " << stos[j] << endl;
		}

		int *wsk;
		//wsk = &stos[5];
		cout << "\n\nTest case:  " << *wsk << "  " << wsk;
	*/
	}
}

// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu

// Tips for Getting Started: 
//   1. Use the Solution Explorer window to add/manage files
//   2. Use the Team Explorer window to connect to source control
//   3. Use the Output window to see build output and other messages
//   4. Use the Error List window to view errors
//   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
//   6. In the future, to open this project again, go to File > Open > Project and select the .sln file<file_sep>/MinMax/MinMax.cpp
#include <iostream>

using namespace std;

struct przedzial
{
	short int poczatek;
	short int koniec;
};

void minmax(int poczatek, int koniec, int *tablica, int min, int max);

int main()
{
	int wielkosc;
	cin >> wielkosc;
	int *ciag;
	ciag = new int[wielkosc];

	for (int i = 0; i < wielkosc; i++) {
		cin >> ciag[i];
	}
	int iloscZ;//ilosc wczytywanych par
	cin >> iloscZ;
	przedzial *zapytanie;
	zapytanie = new przedzial[iloscZ]; // tablica wczytywanych par
	for (int i = 0; i < iloscZ; i++) {
		cin >> zapytanie[i].poczatek;
		cin >> zapytanie[i].koniec;
	}
	int min = NULL;
	int max = NULL;
	for (int i = 0; i < iloscZ; i++) {
		minmax(zapytanie[i].poczatek, zapytanie[i].koniec, ciag, min, max);
	}
	//cout << "\n" << ciag[5];
	//cout << "Test : " << 1 % 2;
	delete[] ciag;
	delete[] zapytanie;
}

void minmax(int poczatek, int koniec, int *tablica, int min, int max){
	min = tablica[poczatek];
	max = tablica[poczatek];
	while (poczatek < koniec+1) {
		if (max < tablica[poczatek]) {
			max = tablica[poczatek];
		}
		if (min > tablica[poczatek]) {
			min = tablica[poczatek];
		}
		poczatek++;
		//return minmax(poczatek + 1, koniec, tablica, min, max);
	}
	cout << min << " " << max << endl;
}


