Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Problema admitere unibuc 2014  (Citit de 1510 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
cristid9
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« : Mai 22, 2015, 23:11:31 »

Salut baieti! Am incercat sa rezolv si eu problema http://fmi.unibuc.ro/ro/pdf/2014/admitere/Subiecte_admitere_DL_INFO_18iulie2014.pdf de la admitere din 2014 de la unibuc. Aici este solutia mea:
Cod:
#include <stdio.h>
#include <string.h>

#define MAX_DIGITS 1000000

char conjugaCifra(char cifra)
{
    if(cifra == '1')
        return '2';
    else
        return '1';
}

void conjugaBucata(char* bucata, char* rezultat, int marime)
{
    int i = 0;
    for(; i < marime; ++i)
    {
        rezultat[i] = conjugaCifra(bucata[i]);
    }
    rezultat[i] = '\0';
}

void afiseazaSirul(int n)
{
    // +1 pentru caracterul null ('\0')
    char rezultat[MAX_DIGITS + 1];

    // Aici stochez temporar conjugatele dintr-un sir de la o iteratie la alta
    // Motivul pentru care impart la patru este ca o conjugata va avea mereu
    // doar 1/4 din marimea sirului din care face parte.
    char tmp[(MAX_DIGITS / 4) + 1];

    // Atribui valoarea de baza sirului
    strcpy(rezultat, "1221");

    // k va lua initial valoarea 4 pentru ca atat este lungimea primului sir.
    // Se observa ca fiecare element al sirului este de 4 ori mai mare decat
    // precedentul.
    for(int k = 4; k < n; k *= 4)
    {
        // Acum am conjugat prima parte a sirului.
        conjugaBucata(rezultat, tmp, k);

        // Vom concatena de 2 ori conjugata
        strcat(rezultat, tmp);
        strcat(rezultat, tmp);

        // Acum conjugam conjugata ca sa obtinem din nou prima parte.
        conjugaBucata(tmp, tmp, k);

        strcat(rezultat, tmp);
    }

    for(int i = 0; i < n; ++i)
    {
        printf("%c", rezultat[i]);
    }
    printf("\n");

}

int main()
{
    int n;
    printf("Introduceti n: ");
    scanf("%d", &n);

    printf("Rezultatul este: ");
    afiseazaSirul(n);

    return 0;
}


Imi puteti spune ce punctaj as putea primi pe ea? Este recomandata o astfel de solutie la examenul de admitere?
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines