Informatică, întrebare adresată de Mathemagician, 9 ani în urmă

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 chisebogdan
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;
}

RapperGaming: nu merge algoritmul l-am testat
RapperGaming: daca il rulezi programul se termina brusc ara sa introduci tu nimic
chisebogdan: poi ai creat fisierul?
chisebogdan: am mentionat ca trebuie sa creezi fisier in codeblock sau mingw si sa introduci numerele in fisier
chisebogdan: in cazul in care nu sti cum sa faci asta in int main schimba peste tot unde scrie f >> cu cin>>
chisebogdan: si introduci de la tastatura
chisebogdan: algoritmul merge eu acum l-am testat
chisebogdan: intai citesti numarul de elemente mai apoi elementele propriu-zise
chisebogdan: anunta-ma daca ti-a mers
Alte întrebări interesante