Afişează mesaje
|
|
Pagini: [1]
|
|
1
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Algoritm echivalent
|
: Iulie 18, 2013, 16:31:40
|
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 = 7Cum as putea sa fac un alt algoritm echivalent cu acesta, care sa imi calculeze ambele variabile corect? Pentru variabila rezultat, fac in felul urmator: 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 ...  Luat de pe olimpiada.info: Sfaturi de buna practica pentru OJI si ONI - DOC 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 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: A[] = {3, 9, 9, 9}; B[] = {3, 8, 8, 8}; add(A, B);
Vectorul A ar trebui sa fie 47881.
|
|
|
|
|
5
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: problema cu subprograme
|
: Decembrie 23, 2011, 17:27:05
|
Nu vad rostul primului parametru ... 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. #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. #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. #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: #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. #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
|
#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."
|
|
|
|
|