Jump to content
Sign in to follow this  
shanker'

Probleme pbinfo

Recommended Posts

E cineva pe aici ce rezolvă probleme pe pbinfo când plictiseala îl depășește? PM privat atunci :)

 

A reușit cineva să obțină 100 de puncte la problema https://www.pbinfo.ro/?pagina=probleme&id=1192 ?

 

Am creat următoarea chinezărie, însă chiar nu-mi pot da seama cum altcumva să rezolv problema pt. a „optimiza” programul (Apelurile de functii sunt 0, deci nu contează că am creat multe funcții)

 

@FnZ, mi silă să-ți dau PM. Ce zici? Sau esti Mate-Info dgb? 😆

 

#include <iostream>
#include <fstream>

using namespace std;

void swap(int *X, int *Y)
{
    int Temp = *X;
    *X = *Y;
    *Y = Temp;
}

void bubbleSort(int Array[], int X)
{
    for (int i=0; i<X; i++)
    {
        for (int j=0; j<X-i-1; j++)
        {
            if (Array[j] < Array[j+1])
                swap(&Array[j], &Array[j+1]);
        }
    }
}

void Conditia_1(int Array[], int X, ofstream &WriteToFile)
{
    for (int i=0; i<X; i++)
    {
        WriteToFile << Array[i] << " ";
        cout << Array[i] << " ";
    }
}

void Conditia_2(int Array[], int X, ofstream &WriteToFile)
{
    cout << endl;
    WriteToFile << endl;

    for (int i=0; i<X; i++)
    {
        if (i == 0)
        {
            cout << "0" << " ";
            WriteToFile << "0" << " ";
            continue;
        }

        if (i == X)
        {
            cout << "0" << " ";
            WriteToFile << "0" << " ";
            break;
        }

        if ((float)(Array[i-1] + Array[i+1])/2 == Array[i])
        {
            WriteToFile << "1" << " ";
            cout << "1" << " ";
        }
        else
        {
            WriteToFile << "0" << " ";
            cout << "0" << " ";
        }
    }
}

void printArray(int Array[], int X, ofstream &WriteToFile, void (*calledFunc)(int [], int, ofstream &))
{
    return (*calledFunc)(Array, X, WriteToFile);
}

int main()
{
    ifstream ReadFromFile ("arhitectura2.in");
    ofstream WriteToFile ("arhitectura2.out");

    long long int X, Numar;
    // cin >> X;
    ReadFromFile >> X;

    int Array[X];

    for (int i=0; i<X; i++)
    {
        // cin >> Numar;
        ReadFromFile >> Numar;
        Array[i] = Numar;
    }

    bubbleSort(Array, X);
    (*printArray)(Array, X, WriteToFile, Conditia_1);
    (*printArray)(Array, X, WriteToFile, Conditia_2);

    ReadFromFile.close();
    WriteToFile.close();
}

Share this post


Link to post
Share on other sites

Am renunțat la bubbleSort, în schimb folosind funcția sort din <algorithm>

 

100 de puncte gratuite here they are!

 

image.thumb.png.143b2a4afa6108442ca75cf85ef671d4.png

 

#include <fstream>
#include <algorithm>

using namespace std;

void Conditia_1(int Array[], int X, ofstream &WriteToFile)
{
    for (int i=0; i<X; i++)
    {
        WriteToFile << Array[i] << " ";
    }
}

void Conditia_2(int Array[], int X, ofstream &WriteToFile)
{
    WriteToFile << "\n";

    for (int i=0; i<X; i++)
    {
        if (i == 0)
        {
            WriteToFile << "0" << " ";
            continue;
        }

        if (i == X)
        {
            WriteToFile << "0" << " ";
            break;
        }

        if ((float)(Array[i-1] + Array[i+1])/2 == Array[i])
        {
            WriteToFile << "1" << " ";
        }
        else
        {
            WriteToFile << "0" << " ";
        }
    }
}

void printArray(int Array[], int X, ofstream &WriteToFile, void (*calledFunc)(int [], int, ofstream &))
{
    return (*calledFunc)(Array, X, WriteToFile);
}

int main()
{
    ifstream ReadFromFile ("arhitectura2.in");
    ofstream WriteToFile ("arhitectura2.out");

    long long int X, Numar;
    ReadFromFile >> X;

    int Array[X];

    for (int i=0; i<X; i++)
    {
        ReadFromFile >> Numar;
        Array[i] = Numar;
    }

    sort (Array, Array+X, greater<int>());
    (*printArray)(Array, X, WriteToFile, Conditia_1);
    (*printArray)(Array, X, WriteToFile, Conditia_2);

    ReadFromFile.close();
    WriteToFile.close();
}

Share this post


Link to post
Share on other sites
Posted (edited)

@shanker'

Proprietatea sirului fibonacci

 

Spre exemplu ai de calculat suma termenilor cu k = [1, 3] atunci vom avea fibo[] = {1, 1, 2, 3, 5, 8, 13, ...}.

Stim ca suma primelor k numere = fibo[k + 2] - 1.

 

Pe exemplul dat k = [1, 3] => S = 4, dar S = fibo[3 + 2] - 1 = 4.

Pentru un alt exemplu k = [3, 5] => S = 10, dar suma aceasta poate fi scrisa ca S = (fibo[5 + 2] - 1) - sigma(3 - 1), unde cu sigma am notat o functie pentru care sigma(n) = fibo[n + 2] - 1.

 

Generalizand pentru un a si b ales arbitrar avem urmatoarea formula de calculare a sumei

S(a, b) = (fibo[b + 2] - 1) - fibo[a + 1] - 1, astfel obtinandu-se

S(a, b) = fibo[b + 2] - fibo[a + 1]

 

 

Atentie: Trebuie sa implementezi niste vectori care iti vor retine cifrele pentru ca daca trebuie sa calculezi pana la 1002-lea termen atunci nu se incadreaza in tipul de date long long sau int.

 

Edited by FnZ

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.