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:
#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?