Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: nhập mảng, sắp xếp phần tử âm tăng dần,dương giảm dần

  1. #1
    Ngày gia nhập
    11 2011
    Bài viết
    0

    Mặc định nhập mảng, sắp xếp phần tử âm tăng dần,dương giảm dần

    Cho mảng một chiều gồm n phần tử nguyên, sắp xếp lại mảng sao cho nhưng phần tử âm thì tăng dần còn các phần tử dương thì giảm dần.Ví dụ: -9 -4 -2 8 7 5 1. In kết quả ra màn hình.( dùng mảng và if, for thôi các bạn nhé)

  2. #2
    Ngày gia nhập
    12 2011
    Bài viết
    6

    Mặc định trả lời

    Nếu tui nhớ ko nhầm 2 ngày trước đã từng hói 1 lần và tui đã viết code cho bài này rồi mà


    Dùng 2 hàm for
    1 hàm if iMang[i] > 0
    1 hàm if iMang[i] < 0

    rùi dùng thuật toán tăng và giảm dần để giải
    khi sắp xếp xong 1 vòng cout nữa

  3. #3
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi nguyenhuanvp Xem bài viết
    Cho mảng một chiều gồm n phần tử nguyên, sắp xếp lại mảng sao cho nhưng phần tử âm thì tăng dần còn các phần tử dương thì giảm dần.Ví dụ: -9 -4 -2 8 7 5 1. In kết quả ra màn hình.( dùng mảng và if, for thôi các bạn nhé)
    Thử xem bài này có giúp ích cho bạn không nhé. bài của bạn là số âm và số dương
    Còn bài mình demo là số chẵn và số lẻ

    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. void swap(int &a, int &b)
    5. {
    6.     a ^= b ^= a ^= b;
    7. }
    8. int main ()
    9. {
    10.     int a [30], n;
    11.     cout << "Nhap N: "; cin >> n;
    12.     for (int i = 0; i < n; i ++)
    13.     {
    14.         cout << "a[" << i + 1 << "]= ";
    15.         cin >> a[i];
    16.     }
    17.     for (int i = 0, j = n - 1; i <= j;)
    18.     {
    19.         if (a[i]%2 == 0)
    20.             if (a[j]%2 != 0)
    21.             {
    22.                 swap (a[i], a[j]);
    23.                 i ++; j --;
    24.             }
    25.             else{j --;}
    26.         else
    27.         {
    28.             if (a[j]%2 == 0)
    29.             {
    30.                 i ++; j --;
    31.             }
    32.             else{ i ++;}
    33.         }
    34.     }
    35.     for (int i = 0; i < n; i ++)
    36.     {
    37.         cout << a[i] << " ";
    38.     }
    39.     return 0;
    40. }
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  4. #4
    Ngày gia nhập
    12 2009
    Nơi ở
    The country of happiness
    Bài viết
    182

    gọi kích thước mảng là n.

    Trong quá trình đọc vào, bạn có thể đánh dấu chỉ số 2 đầu ( i : 1->n và j : n->1) để đọc dãy sao cho sau khi đọc xong, dãy được chia là 1 nửa : 1 phần đầu toàn âm, 1 phần sau toàn dương.

    Đến đây thì bubble sort cho mỗi nửa.
    Trích dẫn Nguyên bản được gửi bởi Wazi Armstrong Xem bài viết
    Ôi skill của mình đã đạt đến hàng tuyệt đỉnh
    Không chỉ ăn, tắm, đi lại có thể code
    Mà giờ đã mình có thể code cả khi ngủ. Code tạm vào buffer của não, lúc nào dậy chỉ việc viết ra một cách trôi chảy không lưỡng lự.
    PS: Nếu ngủ dài rảnh rảnh có thể debug luôn, dậy chỉ việc build ?
    Trích dẫn Nguyên bản được gửi bởi vietanh8286 Xem bài viết
    Lập trình viên giỏi là lập trình viên có vợ

  5. #5
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Giải thuật thì phải biết lợi dụng cá tính của vấn đề. Ở đây cá tính của số dương là chúng lớn hơn số âm.

    Cứ việc sắp xếp theo tăng dần. Sau đó vào mảng tìm chỗ bắt đầu số dương và đảo ngược lại.
    Rất giản dị, trong diễn đàn này có sẵn cả đống hàm sắp xếp và hàm đảo mảng.

  6. #6
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Mặc định nhập mảng, sắp xếp phần tử âm tăng dần,dương giảm dần

    C Code:
    1. void SapXepTang(int *, int); // hàm này có cả đống, không cần viết code
    2. void DaoNguocMang(int *, int); // hàm này có cả đống, không cần viết code
    3.  
    4. // code sắp xếp mảng mang, n phần tử, với số âm theo chiều tăng và số dương theo chiều giảm
    5. // sau khi sắp xếp xong, số dương sẽ nằm sau số âm
    6.  
    7. int cs = -1; // chỉ số phân biệt giũa âm và dương
    8. SapXepTang(mang, n); // mảng bây giờ là tăng, không phân biệt âm dương
    9. while (mang[++cs] < 0 && cs < n-1);
    10. DaoNguocMang(&mang[cs], n-cs); // đảo ngược phần số dương

Các đề tài tương tự

  1. Trả lời: 13
    Bài viết cuối: 13-12-2012, 11:30 AM
  2. Bài tập C Tìm độ dài và in ra dãy tăng có nhiều phần tử nhất
    Gửi bởi kaito_kid_1012 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 24-11-2011, 10:08 PM
  3. Giải thuật về tăng/giảm độ tương phản của ảnh như thế nào?
    Gửi bởi cuipapknight trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 27-08-2011, 11:11 PM
  4. Nhập dãy số tăng và chèn phần tử
    Gửi bởi nguyenhuudung0306 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 17-01-2010, 12:54 AM
  5. Tìm dãy con tăng có nhiều phần tử nhất
    Gửi bởi dreambubble trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 09-01-2010, 10:21 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn