Am o problmea la info , ceva de genul "Să se determine câte dintre perechile de elemente din vector sunt formate din valori cu aceeași sumă a cifrelor." ce as putea face..nu stiu cu se sa incep..cum pot selecta acele numere...
Răspunsuri la întrebare
Răspuns de
1
Eu zic sa creezi o structura in care sa introduci suma numerelor citite si de cate ori aceasta suma apare. Pentru o manipulare mai usoara poti sa le sortezi descrescator/ crescator(eu am ales descrescator). Dar inainte de a insera un numar in structura verifici daca suma lui apare deja, in caz afirmativ incrementand valoarea aparitiilor acelei suma. Eu am facut o sortare prin insertie, bagand in vectorul structura creeat direct in ordine descrescatore. Am folosit totodata citirea din fisier. E mult mai utila. Aici ai codul. Sper sa fi fost de ajutor.
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstring>
using namespace std;
struct numar
{
unsigned suma, valoare;
};
unsigned s1(unsigned n)
{ unsigned s=0;
while(n>0)
{
s=s+n%10;
n/=10;
}
return s;
}
int verificare(numar v[], unsigned n, unsigned a)
{
for(unsigned i=0; i<n; i++)
if(v[i].suma==s1(a))
{
v[i].valoare++;
return 0;
}
return 1;
}
void schimbare(unsigned &a, unsigned &b)
{
unsigned aux=a;
a=b;
b=aux;
}
void inserare(numar v[], unsigned &n, unsigned a)
{
v[n].suma=s1(a);
int i=n;
while(i>0 && v[i].suma>v[i-1].suma)
{
schimbare(v[i].suma, v[i-1].suma);
schimbare(v[i].valoare, v[i-1].valoare);
i--;
}
if(v[i].valoare==0)
v[i].valoare=1;
n++;
}
int main()
{ ifstream f("fisier.txt");
numar v[100];
unsigned n, a[100], t=0, i;
f >> n;
for(i=0; i<n; i++)
v[i].valoare=0;
for(i=0; i<n; i++)
{ f >> a[i];
if(verificare(v, t, a[i]))
inserare(v, t, a[i]);
}
for(i=0; i<t; i++)
cout << v[i].suma << " " << v[i].valoare << endl;
return 0;
}
#include <iostream>
#include <fstream>
#include <cmath>
#include <cstring>
using namespace std;
struct numar
{
unsigned suma, valoare;
};
unsigned s1(unsigned n)
{ unsigned s=0;
while(n>0)
{
s=s+n%10;
n/=10;
}
return s;
}
int verificare(numar v[], unsigned n, unsigned a)
{
for(unsigned i=0; i<n; i++)
if(v[i].suma==s1(a))
{
v[i].valoare++;
return 0;
}
return 1;
}
void schimbare(unsigned &a, unsigned &b)
{
unsigned aux=a;
a=b;
b=aux;
}
void inserare(numar v[], unsigned &n, unsigned a)
{
v[n].suma=s1(a);
int i=n;
while(i>0 && v[i].suma>v[i-1].suma)
{
schimbare(v[i].suma, v[i-1].suma);
schimbare(v[i].valoare, v[i-1].valoare);
i--;
}
if(v[i].valoare==0)
v[i].valoare=1;
n++;
}
int main()
{ ifstream f("fisier.txt");
numar v[100];
unsigned n, a[100], t=0, i;
f >> n;
for(i=0; i<n; i++)
v[i].valoare=0;
for(i=0; i<n; i++)
{ f >> a[i];
if(verificare(v, t, a[i]))
inserare(v, t, a[i]);
}
for(i=0; i<t; i++)
cout << v[i].suma << " " << v[i].valoare << endl;
return 0;
}
RapperGaming:
nu merge algoritmul l-am testat
Alte întrebări interesante
Franceza,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Franceza,
9 ani în urmă
Matematică,
9 ani în urmă