Nu am mai scris de ceva vreme dar totusi numarul celor care viziteaza blogul este constant.
Daca aveti idei de probleme sau probleme rezolvate puteti sa le lasati in commenturi si voi incerca sa raspund la ele cat de repede posibil.
Scopul final fiind de a crea o colectie cat mai mare de probleme publica.
Setarea mediului de lucru pentru c++ cu MinGW si Eclipse, crearea de programe simple, lucrul cu numere, cifrele unui numar, structuri repetitive si de control.
19 nov. 2015
24 feb. 2013
Furnici altruiste
Problema cu furnicile harnice, au prea mult si s-au hotarat sa imparta la greieri. Pot da unui greier o singura unitate de mancare(boaba grau), toate dau cat da cea mai saraca familie, dar se pot inprumuta intre ele, daca se imprumuta se pierde pe drum 1 unitate de mancare pentru fiecare unitate de distanta(metru) parcursa.
Fisier de intrare:
Fisier de intrare:
| 4 | |
| 20 | 300 |
| 40 | 400 |
| 340 | 700 |
| 360 | 600 |
#include <iostream>
#include <fstream>
using namespace std;
//fisier de intrare
ifstream fin("ants.in");
int main()
{
//n - numarul de familii de furnici
//i - index pentru parcurgere
long n,i;
//a - distanta pana la tunel
//b - boabe in plus
//ap - distanta familiei precedente fata de tinel
//s - suma boabelor in plus
double a,b,ap,s=0;
fin>>n;
//prima familie
fin>>a>>b;
s+=b;
ap=a;
//celelalte n-1 familii
for(i=1;i<n;i++)
{
fin>>a>>b;
b=b-(a-ap);
s+=b;
ap=a;
}
fin.close();
//media boabelor exceptand costul drumului
cout<<(s/n);
return 0;
}
23 feb. 2013
Basic C++ Hello World
#include <iostream>
#include <conio.h>
using namespace std;
int main ()
{
cout << "Hello World!";
getch();
return 0;
}
Etichete:
basic,
hello world,
initial
20 nov. 2012
Suma elementelor din vector
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int n, i, s=0;
int v[100];
cout << "n:";
cin >>n;
for (i = 0; i < n; i++) {
cin >> v[i];
}
for (i = 0; i < n; i++) {
s+=v[i];
}
cout<<"Suma:"<< s;
}
propuneri de enunturi
9 nov. 2012
Valoarea maxima din vector
#include<iostream.h>
using namespace std;
int main() {
int n, i, max;
int v[100];
cout << "n:";
cin>>n;
for (i = 0; i < n; i++) {
cin >> v[i];
}
max = v[0];
for (i = 1; i < n; i++) {
if (max < v[i]) {
max = v[i];
}
}
cout << "maxim: " << max;
return 0;
}
propuneri de enunturi
Etichete:
maxim,
parcurgere,
vector
Citirea unui vector
Pentru a citi un vector trebuie sa cititi fiecare valoare a lui, preferabil intr-o bucla for. Mai intai trebuie sa stiti dimensiunea vectorului, se va citi de la tastatura si apoi pe rand valorile vectorului.
#include<iostream.h>
using namespace std;
int main() {
int n, i;
int v[100];
cout << "n:";
cin >> n;
for (i = 0; i < n; i++) {
cin >> v[i];
}
for (i = 0; i < n; i++) {
cout << "v[" << i << "]:" << v[i] << endl;
}
return 0;
}
propuneri de enunturi
7 nov. 2012
Valoarea maxima dintr-o matrice
Pentru a afla valoarea maxima dintr-o matrice trebuie sa aveti o variabila care retine acea valoare maxima, apoi sa parcurgeti toata matricea si sa cautati valori mai mari decat maximul curent, daca gasiti o valoare mai mare atunci o retineti in variabila de referinta. Dupa ce ati citi o matrice ca in exemplu, gasiti maximul in felul urmator.
propuneri de enunturi
int max = matrix[0][0];
for (int i = 0; i < lines; i++) {
for (int j = 0; j < columns; j++) {
if (matrix[i][j] > max) {
max = matrix[i][j];
}
}
}
cout << "Valoarea maxima din matrice este:" << max << endl;
Etichete:
citire,
matrice,
parcurgere
Citirea unei matrici
O matrice este un vector de vectori. Are un numar de linii(considerat un vector) si fiecare element din vectorul respectiv este la randul sau un vector(coloane).
#include <iostream>
using namespace std;
int main() {
//numarul de linii si coloane int lines, columns; cout << "linii:"; cin >> lines; cout << "colomns:"; cin >> columns;
//declararea matricei int matrix[lines][columns];
//citirea de la tastatura a elementrlor, unul cate unul
for (int i = 0; i < lines; i++) {
for (int j = 0; j < columns; j++) {
cout << "matrix[" << i << "][" << j << "]:";
cin >> matrix[i][j];
}
}
//afirare in bloc a matricei
cout << "Afisare matrice:" << endl;
for (int i = 0; i < lines; i++) {
for (int j = 0; j < columns; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
propuneri de enunturi
17 iul. 2012
Numarul de cifre
Sa numaram cate cifre de fiecare grad sunt intr-un numar. Cate cifre de 1, cate de 2 s.a.m.d. Varianta este de forta bruta, ar terbui folosit un vector unidimensional de lungime 10.
Dupa cum se observa un astfel de program este foarte lung chiar daca este simplu de scris.
O versiune mai compacta a acestui program este urmatoarea:
#include <iostream>
using namespace std;
int main() {
int n;
int c;
//initializam numerul de cifre
int i0 = 0, i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0,
i9 = 0;
//citim n
cin >> n;
// numaram cifrele
while (n) {
c = n % 10;
n = n / 10;
switch (c) {
case 0:
i0++;
break;
case 1:
i1++;
break;
case 2:
i2++;
break;
case 3:
i3++;
break;
case 4:
i4++;
break;
case 5:
i5++;
break;
case 6:
i6++;
break;
case 7:
i7++;
break;
case 8:
i8++;
break;
case 9:
i9++;
break;
}
}
//afizam cifrele
cout << "Numarul are: \n";
cout << "[" << i0 << "]" << " de 0\n";
cout << "[" << i1 << "]" << " de 1\n";
cout << "[" << i2 << "]" << " de 2\n";
cout << "[" << i3 << "]" << " de 3\n";
cout << "[" << i4 << "]" << " de 4\n";
cout << "[" << i5 << "]" << " de 5\n";
cout << "[" << i6 << "]" << " de 6\n";
cout << "[" << i7 << "]" << " de 7\n";
cout << "[" << i8 << "]" << " de 8\n";
cout << "[" << i9 << "]" << " de 9\n";
return 0;
}
Dupa cum se observa un astfel de program este foarte lung chiar daca este simplu de scris.
O versiune mai compacta a acestui program este urmatoarea:
#include <iostream>
using namespace std;
int main() {
int n;
int v[10];
int c;
for (int i = 0; i < 10; i++) {
v[i] = 0;
}
cin >> n;
while (n) {
c = n % 10;
n = n / 10;
v[c]++;
}
for (int i = 0; i < 10; i++) {
cout << "[" << v[i] << "]" << " de " << i << "\n";
}
return 0;
}
Resultatul este acelasi, dar codul este mai compact, si mai usor de urmarit.
30 mai 2012
O simpla scriere in fisier
Un exemplu de program care scrie un simplu text in fisier. stocare permanenta pe HDD.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream myfile;
myfile.open("exemplu.txt");
myfile << "Scrie in fisier";
myfile.close();
return 0;
}
propuneri de enunturi
Etichete:
fisiere,
fstream,
scriere fisier,
text
Palindrom de 9 cifre
Sa se scrie un program care afiseaza toate palindroamele de 9 cifre.
#include <iostream>
using namespace std;
int invers(int n) {
int i = 0;
while (n > 0) {
i = (i * 10) + n % 10;
n = n / 10;
}
return i;
}
int main() {
int nr;
for (int i = 10010; i < 100000; i++) {
nr = i;
cout << i << invers(nr / 10) << endl;
}
return 0;
}
14 ian. 2012
Idei de probleme
Salut,
Pentru cei care se mai uita din cand in gand pe blogul asta si ar vrea sa mai vada solutii noi la probleme si mai noi, va rog sa lasati un comment.
multa bafta
Pentru cei care se mai uita din cand in gand pe blogul asta si ar vrea sa mai vada solutii noi la probleme si mai noi, va rog sa lasati un comment.
multa bafta
25 dec. 2011
Cel mai mic multiplu comun
O varianta simpla pentru problema celui mai mic multiplu comun.
O versiune mai rafinata a programului de mai sus
#include <iostream>
using namespace std;
int main() {
int a, b, divizor, putereA, putereB, rezultat = 1;
cin >> a;
cin >> b;
int maxDiv = a / 2;
int sqrtB = b / 2;
if (maxDiv < sqrtB) {
maxDiv = sqrtB;
}
for (divizor = 2; divizor <= maxDiv; divizor++) {
if (a % divizor == 0 && b % divizor == 0) {
putereA = 0;
putereB = 0;
while (a % divizor == 0) {
a = a / divizor;
putereA++;
}
while (b % divizor == 0) {
b = b / divizor;
putereB++;
}
if (putereA > putereB) {
while (putereA > 0) {
rezultat = rezultat * divizor;
putereA--;
}
} else {
while (putereB > 0) {
rezultat = rezultat * divizor;
putereB--;
}
}
} else {
if (a % divizor == 0) {
while (a % divizor == 0) {
a = a / divizor;
rezultat = rezultat * divizor;
}
} else {
if (b % divizor == 0) {
while (b % divizor == 0) {
b = b / divizor;
rezultat = rezultat * divizor;
}
}
}
}
}
cout << "rez=" << rezultat;
return 0;
}
O versiune mai rafinata a programului de mai sus
#include <iostream>
using namespace std;
void getDiv(int &a, int d, int &r) {
r = 0;
while (!(a % d)) {
a = a / d;
r++;
}
}
void addRez(int &rez, int &a, int d) {
while (!(a % d)) {
a = a / d;
rez = rez * d;
}
}
int main() {
int a, b, divizor, putereA, putereB, rezultat = 1;
cin >> a;
cin >> b;
int maxDiv = a > b ? a : b;
maxDiv /= 2;
for (divizor = 2; divizor <= maxDiv; divizor++) {
if (a % divizor || b % divizor) {
getDiv(a, divizor, putereA);
getDiv(b, divizor, putereB);
if (putereA > putereB) {
while (putereA) {
rezultat = rezultat * divizor;
putereA--;
}
} else {
while (putereB) {
rezultat = rezultat * divizor;
putereB--;
}
}
} else {
if (!(a % divizor)) {
addRez(rezultat, a, divizor);
} else {
if (!(b % divizor)) {
addRez(rezultat, b, divizor);
}
}
}
}
cout << "rez= " << rezultat;
return 0;
}
propuneri de enunturi
24 dec. 2011
Setare variabila in Path in Windows 7
Pentru a folosi MinGW in windows cu un GUI precum Eclipse, trebuie setata variabila gcc in Path-ul de la windows. Dupa ce instalati MinGW executati pasii urmatori:
- Click pe Start
- Click dreapta pe Computer
- Din meniul contextual dati click pe Properties
- Click pe 'Advanced system settings' din coltul stanga sus (Control panel Home img).
- Se va afisa fereatra 'System propertis'
- Click pe Tab-ul 'Advanced'
- Click pe Enviroment Variables
- Pentru a adauga MinGW in Path selectati variabila de sistem Path si selectati 'Edit...'. Apoi adaugati in valoarea acelei variabile calea catre MinGW.
![]() |
| Control Panel Home |
![]() |
| Enviroment variables |
Salvati toate modificarile.
Acum puteti folosi compilatorul gcc in Eclipse folosind MinGW.
21 dec. 2011
editare char array
Se citeste de la tastatura un sir s, de lungime cel mult 80 de caractere. Numim umbra sirului s, sirul obtinut prin urmatoarele operatii asupra sirului s:
- transformarea tuturor literelor mari in litere mici si invers
- dublarea caracterului punct
- inlocuirea tuturor celorlalte caractere speciale cu caracterul '#'
- eliminarea tuturor cifrelor
#include <iostream>
using namespace std;
char str[100];
void replaceLetter(int i) {
str[i] += (str[i] > 96) ? (-32) : 32;
}
void addPct(int i) {
for (int j = 99; j > i; j--) {
str[j] = str[j - 1];
}
}
void removeDigit(int i) {
for (int j = i; j < 99; j++) {
str[j] = str[j + 1];
}
}
int main() {
//ab23Am.,t5F:-Ku
cin >> str;
int i = 0;
while (str[i] != '\000' && i < 100) {
if ((str[i] > 64 && str[i] < 91) || (str[i] > 96 && str[i] < 123)) {
replaceLetter(i);
i++;
} else {
if (str[i] == 46) {
addPct(i);
i += 2;
} else {
if (str[i] >= '0' && str[i] <= '9') {
removeDigit(i);
} else {
str[i] = '#';
i++;
}
}
}
}
cout << str;
}
18 dec. 2011
Inversare partea intreaga cu zecimale
enunt: Sa se inverseze partea intreaga cu partea zecimala a unui numar real.
exemplu: pentru 12.34 se va afisa 34.12
exemplu: pentru 12.34 se va afisa 34.12
#include <stdio.h>
int main(int argc, char *argv[])
{
double daux = 12.34;
int integr = daux;
int iaux = integr;
double zaux;
double zecim = integr;
int a=daux;
while(a != daux){
daux = daux * 10;
a = daux;
integr = integr * 10;
}
zecim = daux-integr;
zaux = iaux;
while(iaux){
iaux = iaux / 10;
zaux = zaux / 10;
}
printf("numar=%f",zecim+zaux);
return 0;
}
propuneri de enunturi
Etichete:
cifre,
numar real,
zecimale
4 dec. 2011
Sortarea cifrelor unui numar
Programul urmator sorteaza cifrele unui numar intreg
#include <iostream>
using namespace std;
/*
* functia sort - bubble sort simplificat
*
* primeste vectorul pentru sortare si dimensiunea folosita
*
* returneaza adresa vectorului sortat
*/
int* sort(int n[], int size) {
bool f = true;
int tmp;
//cat timp mai sunt interschimbari
while (f) {
f = false;
// verifica daca mai sunt intersichimbari
for (int i = 1; i < size; i++) {
if (n[i - 1] > n[i]) {
tmp = n[i - 1];
n[i - 1] = n[i];
n[i] = tmp;
f = true;
}
}
}
return n;
}
int main() {
// vectorul care va tine cifrele
int v[10];
// n - numarul dat
int n;
// numarul de cifre
int i = 0;
cin >> n;
// cat timp n mai are cifre
// le parcurgem si le punem in vector
while (n != 0) {
v[i] = n % 10;
n = n / 10;
i++;
}
//sortam vectorul
sort(v, i);
for (int j = 0; j < i; j++) {
cout << v[j] << ',';
}
return 0;
}
propuneri de enunturi
Etichete:
bubble sort,
cifre,
functie,
sortare,
vector
Numar suspect
Un numar e suspect daca e sufixul patratului sau.
#include <iostream>
using namespace std;
int main() {
int n, i = 0, ii, total = 0;
cin >> n;
while (total < n) {
i++;
ii = i * i;
int val = i;
bool f = true;
while (i != 0) {
int ci = i % 10;
int cii = ii % 10;
i = i / 10;
ii = ii / 10;
if (ci != cii) {
f = false;
break;
}
}
i = val;
if (f) {
cout << val << ", ";
total++;
}
}
return 0;
}
Etichete:
sufix,
ultima cifra,
while
1 dec. 2011
CMMDC
Folosind algoritmul lui Euclid calculez cel mai mare divizor comun
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a;
cin >> b;
while (a != b) {
if (a > b)
a = a - b;
else
b = b - a;
}
cout << "cmmdc= " << a;
return 0;
}
propuneri de enunturi
28 nov. 2011
Fibonacci number
Sirul lui Fibonacci, primele 30 de numere din acest sir
#include <iostream>
using namespace std;
int main() {
int u = 0;
int v = 1;
int i, t;
for (i = 2; i <= 30; i++) {
t = u + v;
u = v;
v = t;
cout << t << ", ";
}
return 0;
}
Abonați-vă la:
Postări (Atom)


