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

Đề tài: Điều kiện bài này thế nào ạ

  1. #1
    Ngày gia nhập
    12 2022
    Bài viết
    1

    Mặc định Điều kiện bài này thế nào ạ

    Viết chương trình nhập N số nguyên. sắp xếp dãy số sao cho các số chẵn chia hết cho 3 lên trên và số lẽ chia hết cho 3 ra sau. các số còn lại xóa khỏi mảng.

  2. #2
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    663

    Trích dẫn Nguyên bản được gửi bởi newbie666 Xem bài viết
    Viết chương trình nhập N số nguyên. sắp xếp dãy số sao cho các số chẵn chia hết cho 3 lên trên và số lẽ chia hết cho 3 ra sau. các số còn lại xóa khỏi mảng.
    Vừa nhập vừa loại bỏ các số không chia hết cho 3
    Kết quả, thu được 1 dãy chứa toàn số chia hết cho 3
    Đặt i = 0, j = chỉ số cuối cùng của dãy
    Vừa tìm số lẻ từ vị trí i sang bên phải, lưu chỉ số kết quả vào i, vừa tìm số chẵn từ vị trí thứ j sang bên trái, lưu chỉ số kết quả vào j
    Nếu không tìm thấy số lẻ hay chẵn hoặc tìm được nhưng i > j, dãy đã được sắp xếp. Ngược lại, đảo 2 số tại vị trí i và j, rồi quay lại bước tìm i và j

  3. #3
    Ngày gia nhập
    02 2016
    Bài viết
    338

    Bài này thuật toán quá dễ, quá căn bản.
    Cái khó là dùng chỉ số mảng chô hữu hiệu. Ngôn ngữ C cho phép dùng mảng một cách hữa hiệu khi có kèm con toán tự tăng/giảm chỉ số.

    - Đặt 2 mảng số nguyên mng1, mng2, N phần tử. Và 2 biến đếm d1=0, d2=0
    - Nhâp N số, xét
    --- Không chia chẵn 3, bỏ qua : if (soNhap % 3) continue;
    --- Số lẽ, cho vào mng1, và d1++ : if (soNhap & 1) mng1[d1++] = soNhap;
    --- Số chẵn, cho vào mng2, và d2++ :else mng2[d2++] = soNhap;
    - Chép nối mng1 vào đuôi mng2 : while (d1) mng2[d2++] = mng1[--d1];

    Dùng 1 mảng như bài trên thì tiết kiệm bộ nhớ, nhưng code ghi ngược mảng hơi rắc rối hơn.
    dc = 0, dl = N;
    // dc chứa vị trí kế tiếp để chép số chẵn, dl chứa vị trí vừa chép xong số lẽ.
    --- Số lẽ, cho vào cuối mảng, và --dl : if (soNhap & 1) mng[--dl]= soNhap;
    --- Số chẵn, cho vào đàu mảng, và dc++ : else mng[dc++] = soNhap;
    - Chép nối đuoi mảng vào tiếp tục phần đầu vào mng : while (dl<N) mng[dc++] = mng[dl++];

    Tôi tính số lẽ trước bởi vì con toán xét số lẽ nhanh hơn con toán xét số chẵn.
    Đã được chỉnh sửa lần cuối bởi NguNhuheo : 02-01-2023 lúc 08:18 PM. Lý do: thêm phân giải thích

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