Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Informatica / Algoritm echivalent : Iulie 18, 2013, 16:31:40
Cod:
citeste a, b ( numere naturale )
s <- a
r <- 0
iteratii <- 0
cat timp b > 1 executa
  iteratii <- iteratii + 1
  daca b % 2 = 0 atunci
    s <- s * 2
    b <- b / 2
  altfel
    r <- r + s
    b <- b - 1
  sfarsit_daca
sfarsit_cat_timp

rezultat <- s + r

Urmatorul algoritm, calculeaza in variabila rezultat produsul numerelor a * b. Pentru setul de valori a = 4, b = 56, valorile variabilelor urmatoare vor fi:
rezultat = 224
iteratii = 7


Cum as putea sa fac un alt algoritm echivalent cu acesta, care sa imi calculeze ambele variabile corect?

Pentru variabila rezultat, fac in felul urmator:
Cod:
cat timp a <> 0 executa
  rezultat <- rezultat + b
  a <- a - 1
sfarsit_cat_timp
scrie rezultat

Dar la iteratii? Vreun indiciu ceva? Sau poate nu acesta ar fi algoritmul partial echivalent?

Va multumesc!
2  infoarena - concursuri, probleme, evaluator, articole / Concursuri / Răspuns: OJI 2012 : Martie 03, 2012, 20:08:57
Trebuia sa afisezi ceva, orice, pe prima linie .... si ti s-ar fi luat in considerare a doua ...  Smile

Luat de pe olimpiada.info: Sfaturi de buna practica pentru OJI si ONI - DOC

Cod:

3. Respectați formatul fișierului de de ieșire!
De exemplu, fie o problemă care are două cerinÈ›e: a) È™i b). Să presupunem că se cere ca răspunsul pentru cerinÈ›a a) trebuie se găsească pe linia 1, iar răspunsul pentru cerinÈ›a b) să se găsească pe linia 2. ÃŽn situaÈ›ia în care nu aÈ›i reuÈ™it să rezolvaÈ›i cerinÈ›a a) dar aveÈ›i un răspuns pentru b), veÈ›i scrie răspunsul pentru cerinÈ›a b) pe linia 2 È™i nu pe prima linie  !
3  infoarena - concursuri, probleme, evaluator, articole / Articole / Răspuns: Multe "smenuri" de programare in C/C++... si nu numai! : Ianuarie 09, 2012, 20:04:21
La adunarea numerelor mari
Cod:

void add(int A[], int B[])
{
      int i, t = 0;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
              A[i] = (t += A[i] + B[i]) % 10;
      A[0] = i - 1;
}
este corecta functia daca cele 2 numere au acelasi numar de cifre ( A[0] == B[0] ), iar in acest caz suma cifrelor dominante este mai mica decat 9.  

Si de ce A[0] = i - 1 ? Daca am avea:
Cod:
A[] = {3, 9, 9, 9};
B[] = {3, 8, 8, 8};
add(A, B);
Vectorul A ar trebui sa fie 47881.
4  Comunitate - feedback, proiecte si distractie / Off topic / C++ Bjarne Stroustrup Teora : Decembrie 29, 2011, 13:11:34
Salutare baieti. Caut de vreo 2 luni cartea C++ Bjarne Stroustrup, editura Teora, dar nu am gasit-o  Angry. As dori sa o cumpar. Stiti undeva unde as putea-o gasi ?  Applause
5  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: problema cu subprograme : Decembrie 23, 2011, 17:27:05
Nu vad rostul primului parametru ...
Cod:
int f(int n, int a[], unsigned int p1, unsigned int p2)
{
unsigned int i = 0, k = 0;
for(i = p1; i <= p2; i++)
if(a[i] < 0)
k++;

return (k > 1); // 1 - daca exista 2 sau mai multe numere negative in [p1, p2]
}
6  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Probleme Cifre : Decembrie 23, 2011, 17:20:02
1.
Cod:
#include <iostream>
using namespace std;

int v[10];
int main()
{
int i, n, c;
cout << "n = "; cin >> n;
while(n != 0)
{
c = n % 10;
v[c]++;
n = n / 10;
}
for(i = 0; i < 10; i++)
cout << v[i] << " cifre de " << i << endl;

system("pause>nul");
return 0;
}


3.
Cod:
#include <iostream>
using namespace std;

int main()
{
int a, b, c_a, c_b, x, v[10] = {0};
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
if(a == b != 0)
{
cout << "0";
system("pause>nul");
return 0;
}
while(a)
{
c_a = a % 10;
x = b;
while(x)
{
c_b = x % 10;
if(c_b == c_a) v[c_b] = c_b;
x = x / 10;
}
a = a / 10;
}
cout << "Numerele a si b au urmatoarele cifre in comun: " << endl;
for(int i = 0; i < 10; i++)
if(v[i])
cout << v[i] << " ";

system("pause>nul");
return 0;
}

4.
Cod:
#include <iostream>
using namespace std;

int main()
{
int n, m, x = 0, j = 1, k, s;
cout << "n = "; cin >> n;
cout << "m = "; cin >> m;
while(x != n)
{
s = 0;
k = j;
while(k)
{
s += k % 10;
k = k / 10;
}
if(s <= m)
{
cout << j << " ";
x++;
}
j++;
}
system("pause>nul");
return 0;
}

2-ul e putin mai complicat, iar la 5 nu am inteles.

EDIT: Uite aici si 2-ul:
Cod:
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int x, n, c, min, k(1), m(0), poz, p;
cout << "n = "; cin >> n;
x = n;
min = x % 10;
x = x / 10;
while(x)
{
c = x % 10;
if(min >= c)
{
min = c;
m = k;
}
x = x / 10;
k++;
}
poz = m;
p = pow(static_cast<double>(10), static_cast<double>(poz));
n = n % p + p * (n / (p * 10));
cout << n << endl;

system("pause>nul");
return 0;
}

5. L-am facut pentru cel mai mic numar cu proprietatea ca n^n (n la puterea n) are n cifre.
Cod:
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int n, p, k(0);
n = 1;
do
{
n++;
k = 0;
p = pow(static_cast<double>(n), static_cast<double>(n));
while(p)
{
++k;
p = p / 10;
}
}
while(k != n);
cout << n << endl;

system("pause>nul");
return 0;
}
7  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Putin ajutor... :) : Decembrie 23, 2011, 16:43:46
Cod:
#include <iostream>
using namespace std;

#define CUV (0)
#define CARAC (1)

int P[2][500], x(0);

void MAX_MIN_CUVINTE()
{
int maxcuv, mincuv, k[2] = {0, 0};
maxcuv = mincuv = P[CUV][0];
for(int i = 1; i < x; i++)
{
if(P[CUV][i] > maxcuv)
{
maxcuv = P[CUV][i];
k[0] = i;
}

if(P[CUV][i] < mincuv)
{
mincuv = P[CUV][i];
k[1] = i;
}
}
cout << "Propozitia cu cele mai multe cuvinte este propozitia " << ++k[0] << ", care contine " << maxcuv << (maxcuv == 1 ? (" cuvant") : (" cuvinte")) << "." << endl;
cout << "Propozitia cu cele mai putine cuvinte este propozitia " << ++k[1] << ", care contine " << mincuv << (mincuv == 1 ? (" cuvant") : (" cuvinte")) << "." << endl;
}

void MAX_MIN_CARAC()
{
int maxcarac, mincarac, k[2] = {0, 0};
maxcarac = mincarac = P[CARAC][0];
for(int i = 1; i < x; i++)
{
if(P[CARAC][i] > maxcarac)
{
maxcarac = P[CARAC][i];
k[0] = i;
}

if(P[CARAC][i] < mincarac)
{
mincarac = P[CARAC][i];
k[1] = i;
}
}
cout << "Propozitia cu cele mai multe caractere este propozitia " << ++k[0] << ", care contine " << maxcarac << (maxcarac == 1 ? (" caracter") : (" caractere")) << "." << endl;
cout << "Propozitia cu cele mai putine caractere este propozitia " << ++k[1] << ", care contine " << maxcarac << (mincarac == 1 ? (" caracter") : (" caractere")) << "." << endl;
}

int main()
{
int i, j, len, prop(0), k(0);
char S[1000];
cout << "Dati sirul: "; gets(S);
for(i = 0, len = strlen(S); i < len; i++)
{
if(S[i] == '.' || S[i] == '?' || S[i] == '!' || S[i+1] == NULL)
{
prop++;
for(j = k; j <= i; j++)
{
P[CARAC][x]++;
if(S[j] == ' ' || S[j+1] == NULL || S[j+1] == '.' || S[j+1] == '?' || S[j+1] == '!')
{
P[CUV][x]++;
}
}
++x;
k = i;

}
}
cout << endl << endl <<  "Numarul propozitiilor: " << prop << endl;
MAX_MIN_CUVINTE();
MAX_MIN_CARAC();

system("pause>nul");
return 0;
}

Ideea este ca propozitiile trebuie scrise cum le scrii pe caiet, nu cum scrii in word.
Exemplu bun: "Salut.Ce mai faci?Uite bine, pe acasa!Tu?Si eu la fel, multumesc."
8  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: Nc : Martie 26, 2011, 11:46:22
1. Ca sa iei minim un test, trebuie sa faci amandoua cerinte ?
2. Am facut doar prima cerinta ( ÃŽn fiÅŸierul de ieÅŸire nc.out se va afisa pe prima linie un numar N reprezentand numarul de fraze din text ) si am primit 0 puncte ( per total ).
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines