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:
#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: