Lỗi thuật toán về mảng (chạy không ra kết quả)

Em chào mọi người. Em có bài là viết lại dãy số. Đại khái là cho 1 dãy a1 a2… an thì viết lại thành dãy a1 a3 … a4 a2. Ví dụ cho dãy 1 2 3 4 5 6 thì viết lại là 1 3 5 6 4 2

Đề là cho dãy đã viết lại, khôi phục dãy ban đầu.

Đây là code em cho bài này. Em có chạy thử thì nó không dính lỗi biên dịch nhưng nó cũng không hoạt động.

#include<iostream>
using namespace std;

int main(){
	int n;
	cin >> n;
	int a[n];
	int b[n];
	// input:  1 3 5 6 4 2
	// output: 1 2 3 4 5 6
	for (int i=0; i<n; i++){
		cin >> a[i];
	}
	for (int i=0; i<n; i+2){
		if (2*i<n) b[2*i]=a[i];
	}
	int j=1;
	for (int i=n-1; i>0; i--){
		if (i%2!=0) {
			b[j]=a[i];
			j+=2;	
			}
	}
	for (int i=0; i<n; i++) cout << b[i] << " ";
	cout << endl;
	//}	
	return 0;
	
}

Sau khi kiểm tra thì có vẻ là đoạn code này của em không chạy:

   for (int i=0; i<n; i+2){
    		if (2*i<n) b[2*i]=a[i];

Em không biết đoạn code trên sai ở đâu. Mọi người giải thích giúp em được không ạ?

Sai chỗ này, phải là (int i = 0; i < n; i += 2) mới đúng

1 Like

Ồ cảm ơn anh ạ em fix code chạy được rồi :smiley:

Code đã sửa cho bạn nào muốn biết:

#include<iostream>
using namespace std;

int main(){
	int tc;
	cin >> tc;
	while (tc--){
		int n;
		cin >> n;
		int a[n];
		int b[n];
		// 1 3 5 6 4 2 
		// 1 2 3 4 5 6
		for (int i=0; i<n; i++){
			cin >> a[i];
		}
		// 1 3 5 7 6 4 2
		// 1 2 3 4 5 6 7
		
		for (int i=0; i<n; i++){
			if (2*i<n) b[2*i]=a[i];
		}
		int j=1;
		for (int i=n-1; i>=(n/2); i--){
				b[j]=a[i];
				j+=2;	
				}
		for (int i=0; i<n; i++) cout << b[i] << " ";
		cout << endl;
		}	
	return 0;
	
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?