Lỗi thuật toán list

UPDATE: Em sửa được cho nó nhập bình thường rồi, nhưng nó không chạy đúng theo ý tưởng của em. Ai biết em sai ở đâu thì chỉ em với!!!

Em chào anh chị ạ! Nay em có làm 1 bài là cho 1 dãy n số, số đầu tiên thì viết ở đầu, số thứ 2 thì viết ở cuối, số thứ 3 viết sau số đầu, số thứ 4 thì viết trước số ở cuối… cứ như thế cho đến hết dãy. Ví dụ cho dãy:
1 2 3 4 5 6
thì viết lại sẽ là
1 3 5 6 4 2

Trong đó input dòng 1 integer t là số test case, dòng tiếp theo là n - số phần tử trong dãy, và dòng cuối là các phần tử, output thì hiện dãy đã biến đổi ra.

Ví dụ:
Input:
2
6
1 2 3 4 5 6
2
5 3
Output:
1 3 5 6 4 2
5 3

Để làm bài này thì em nảy ra ý tưởng là dùng , tạo 2 list mới, với các phần tử chẵn a[0], a[2]… thì push_back vào 1 list, với các phần tử lẻ thì push_front vào 1 list rồi in 2 list này ra (thực ra em muốn merge 2 list nhưng em k biết merge kiểu gì :v). Em gõ theo ý tưởng này thì nó vẫn chạy nhưng mà lúc nhập thì nhập được vài số xong k nhập được luôn. Các anh chị chỉ giúp em xem em sai chỗ nào với.

#include<iostream>
#include<bits/stdc++.h>
#include<list>
#include<string>
using namespace std;

void printflist(list<int> words)
{
    list<int>::iterator i;
    for (i = words.begin(); i != words.end(); i++)
    {
        cout << *i << " ";
    }
}
    
int main(){
	int tc;
	cin >> tc;
while(tc--){
		int n;
		int a[n];
		cin >> n;
		for (int i=0; i<n; i++){
			cin >> a[i];
		}	
		list<int>st1;
		list<int>st2;
		for (int i=0; i<n; i+=2) st1.push_back(a[i]);
		for (int i=1; i<n; i+=2) st2.push_front(a[i]);
		printflist(st1);
		printflist(st2);
}
return 0;
}

Câu này hỏng. Bỏ ngay và luôn (vì stack không thể có độ dài tùy ý, và cũng ko đc hỗ trợ).

arraylist

Trong C++ là std::vector chứ ko phải std::list đâu :smiley:

4 Likes

Giờ sửa thế nào ạ? Em thử thay int a[20] nó vẫn không khác lúc em để a[n] :frowning:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?