fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. // hàm sắp xếp nổi bọt giảm dần
  4. void bbsort (int a[], int n) {
  5. for (int i=0; i<n-1; i++) {
  6. for (int j=0; j<n-i-1; j++) {
  7. if (a[j]<a[j+1]) swap (a[j], a[j+1]);
  8. }
  9. }
  10. }
  11. // hàm tách số n thành mảng các chữ số (và trả về số chữ số của n) va luu số số 0 (zeros)
  12. int split (int a[], int n, int dau, int &zeros) {
  13. int i=0;
  14. while (n>0) {
  15. if (n%10==0) zeros++;
  16. else {
  17. // lưu giữ các chữ số theo dấu để dễ thao tác
  18. a[i]=dau*n%10;
  19. i++;
  20. }
  21. n/=10;
  22. }
  23. return i;
  24. }
  25.  
  26. // ham tra ve max cua so n (bằng cách sắp xếp mảng các chữ số n)
  27. int maxN (int n, int dau) {
  28. int a[10005];
  29. int zeros= 0, cs= split (a, abs(n), dau, zeros);
  30. bbsort (a, cs);
  31. int res=0;
  32. // số dương để lớn nhất thì chỉ cần tạo số từ mảng đã được sắp xếp giảm dần rồi nhét các số 0 ở cuối
  33. if (dau==1) {
  34. for (int i=0; i<cs; i++) res=res*10+a[i];
  35. for (int i=0; i<zeros; i++) res*=10;
  36. }
  37. // số âm để lớn nhất thì phải nhét toàn bộ số 0 vào chữ số bé thứ 2 (a[0])
  38. else {
  39. res= a[0];
  40. for (int i=0; i<zeros; i++) res*=10;
  41. for (int i=1; i<cs; i++) res=res*10+a[i];
  42. }
  43. return res;
  44. }
  45.  
  46. int main () {
  47. ios_base:: sync_with_stdio(false);
  48. cin.tie(nullptr);
  49.  
  50. int n; cin >> n;
  51. int a[n];
  52. for (int i=0; i<n; i++) cin >> a[i];
  53. for (int i=0; i<n; i++) {
  54. a[i]= maxN (a[i], (a[i]<0)? -1: 1);
  55. }
  56. bbsort (a, n);
  57. for (int i=0; i<n; i++) cout << a[i] << " ";
  58. }
Success #stdin #stdout 0.01s 5292KB
stdin
10
61 947 6 96 534 2669 4 263 1449 77
stdout
9662 9441 974 632 543 96 77 61 6 4