Informatică, întrebare adresată de mariagkiw, 8 ani în urmă

Se citesc doua numere naturale n si m (n<=100) si apoi se citeste o matrice cu n linii si m coloane avand elemente numere naturale cu cel mult 9 cifre. Ordonati crescator elementele de pe fiecare coloana dupa suma cifrelor. Daca doua elemente au aceeasi suma a cifrelor, ordonarea se face crescator dupa valoare. Afisati matricea rezultata pe ecran
Se vor defini si apela functii pentru:
- citirea matricei
- afisarea matricei
- calculul sumei cifrelor unui numar
- ordonarea unei coloane conform cu cerinta problemei.
Exemplu: se citesc
5 6
11 21 33 343 200 15
500 11 21 33 343 6
927 11 21 33 343 33
109 2 35 47 5 42
918 121 221 323 343 24
Se va afisa
11 2 21 33 200 6
500 11 21 33 5 15
109 11 221 323 343 24
918 21 33 343 343 33
927 121 35 47 343 42

Răspunsuri la întrebare

Răspuns de uionutalin
3

Răspuns:

#include <iostream>

using namespace std;

int a[100][100],n,m,i,j;

void citire(int a[100][100],int &n,int &m)

{

   cin>>n>>m;

   for(i=1; i<=n; i++)

       for(j=1; j<=m; j++)

           cin>>a[i][j];

}

int suma(int x)

{

   int s=0;

   while(x)

   {

       s=s+x%10;

       x=x/10;

   }

   return s;

}

void ordonare(int a[100][100],int n,int m)

{

   int v[n],jj,aux;

   for(j=1; j<=m; j++)

   {

       for(i=1; i<=n; i++)

           v[i]=suma(a[i][j]);

       for(i=1; i<=n; i++)

           for(jj=i+1; jj<=n; jj++)

               if(v[i]>v[jj] || (v[i]==v[jj] && a[i][j]>a[jj][j]))

               {

                   aux=a[i][j];

                   a[i][j]=a[jj][j];

                   a[jj][j]=aux;

                   aux=v[i];

                   v[i]=v[jj];

                   v[jj]=aux;

               }

   }

}

void afisare(int a[100][100],int n,int m)

{

   for(i=1; i<=n; i++)

   {

       for(j=1; j<=m; j++)

           cout<<a[i][j]<<" ";

       cout<<endl;

   }

}

int main()

{

   citire(a,n,m);

   ordonare(a,n,m);

   afisare(a,n,m);

   return 0;

}

Explicație:

Alte întrebări interesante