01/10/2018, 00:19

Mọi người giúp em về ct đảo ngược mảng

code:

#include<iostream>

using namespace std;
int main() {
    int size,N,temp;
    int arr[]= { 2, 6, 5, 7, 9, 1, 3 };

    size=sizeof(arr)/sizeof(int);
    N=size-1;
    for(int index=0; index<=N; index++) {
        temp = arr[index];
        arr[index] = arr[N-index];
        arr[N-index] = temp;
    }

    for(int a=0; a<=N; a++) {
        cout<<arr[a]<<" ";
    }
    return 0;
}

em không tìm được mình nhầm lẫn chỗ nào, khiến mảng không đảo

Nguyễn Xuân Phúc viết 02:30 ngày 01/10/2018
    for(int index=0;index&lt;=N;index++)
    {
    	temp = arr[index];

    arr[index] = arr[N-index];
    arr[N-index] = temp;

    	
    	

    }

khi chạy từ 1 đến N/2, nó swap nửa trước với nửa sau
khi chạy từ N/2+1 đến N, nó swap nửa sau với nửa trước
mèo lại hoàn mèo :3
duyệt 1 nửa thôi b

Tynk Huynk viết 02:26 ngày 01/10/2018

Nếu bạn về học về Quicksort thì bạn sẽ dễ giải quyết được vấn đề này (Mặc dù không liên quan với nhau cho lắm ). Bạn cho 2 biến đại diện cho 2 index: 1 cái ở đầu mảng, 1 cái ở cuối mảng, rồi cho vòng lặp while với điều kiện (index1 <= index2) với mỗi lần lặp bạn swap 2 phần tử ở 2 index ấy rồi tăng 1 đơn vị cho index1, giảm 1 đơn vị cho index2.

Nói dễ hiểu là bạn phải swap 2 phần tử mà có vị trí đối xứng với nhau

Đây là code mình viết bằng Java, bạn có thể tham khảo:

public static void main(String[] args) {
        int[] arr = {2, 6, 5, 7, 9, 1, 3};
        int lower = 0;
        int upper = 6;
        while (lower <= upper) {
            int temp = arr[lower];
            arr[lower] = arr[upper];
            arr[upper] = temp;
            lower++;
            upper--;
        }
        System.out.println(Arrays.toString(arr));
    }
Vô Thin viết 02:33 ngày 01/10/2018

Giải pháp gì mà rắc rối vậy hen? Người ta chỉ cần cho vòng for chạy ngược thôi, chứ làm chi mà khai báo lower rồi upper nhìn vô phát DRY? Lúc chạy chép qua mảng trung gian khác nếu đề bài hông bắt buộc cấm dùng mảng trung gian, sau đó gán ngược trở lại là xong.

Tynk Huynk viết 02:27 ngày 01/10/2018

Em cũng nghĩ đến cách đó rồi ạ, mà tại sáng nay em mới học về Quick sort nên thử chút chơi ấy mà

Bài liên quan
0