Các thao tác cơ bản với mảng một chiều

chạy lần 2 (khi nhập các giá trị trùng lặp nhiều hơn 2 lần, chương trình chạy ko ok lắm)

Bài tập 1

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
	/*
	================================================
	ĐẢO NGƯỢC MẢNG 1 CHIỀU SAU:
	Input : int32_t arr[] = { 2, 6, 5, 7, 9, 1, 3 };
	N = 8						N = 7
	0 1 2 3 4 5 6 7				0 1 2 3 4 5 6
	2 6 5 7 4 9 1 3				2 6 5 7 9 1 3

	3 1 9 4 7 5 6 2				3 1 9 5 7 6 2
	Output: 3 1 9 7 5 6 2
	================================================
	TH1
	N = 7 (Mảng luôn đối xứng )
	==> last_index = 6
	Mảng chia ra làm 2 cặp đối xứng luôn luôn có tỷ lệ
	6 + 0 = 6
	1 + 5 = 6
	.
	.
	3 + 3 = 6

	TH2
	N = 8(bất đối xứng) =>> làm tròn số lặp 1 nữa mảng thì dừng lại
	*/

	//initialize array
	int32_t arr[] = { 2, 6, 5, 7, 9, 1, 3 };
	int32_t N = 7;

	//reversing
	int32_t last_index = N - 1;
	for (int32_t index = 0; index <= ceil((N - 1)/2); index++) {
		int32_t index_swap = last_index - index;

		//swap
		int32_t temp = arr[index];
		arr[index] = arr[index_swap];
		arr[index_swap] = temp;
	}

	//priting
	for (int32_t index = 0; index <= N - 1; index++) {
		cout << "arr[" << index << "] = " << arr[index] << endl;
	}

	system("pause");
	return 0;
}
1 Like

Bài 3

#include <iostream>
using namespace std;

int main() {
	/*
	In mảng không trùng lặp
	-----------------------
	Ý tưởng: 
	In lần lượt các giá trị trước sau đó kiểm tra giá trị trước đó đã in hay chưa ? 
	Nếu in rồi thì thoát vòng lặp.
	*/
	int32_t arr[] = { 4,6,2,2,1,6,9,4,4,4,4,6,6,494,9,14,14,4,6,1,3,3,45,89,78,45 };
	int32_t N = 26;

	//printing
	for (int32_t index = 0; index <= N - 1; index++) {

		int32_t after_index = 0;
		for (after_index = 0; after_index < index; after_index++) { // check duplicate in an array

			if (arr[index] == arr[after_index]) { 
				break; //exit loop
			}
		}

		//print an array not duplicate 
		if (index == after_index)
			cout << arr[index] << " " ;
	}

	system("pause");
	return 0;
}
1 Like

Vòng lặp đảo mảng bạn cho i chạy đến n/2 thôi

1 Like


sao cái code của mình nó chạy như này v mọi người?
ai chỉ mình cách sửa được không ạ!

Code của cậu chạy thành công (exit with code 0), và in ra kết quả rồi. Đó không phải lỗi đâu.
Btw, cậu đã kỳ vọng chương trình của cậu chạy ra kết quả gì? :smile:

1 Like
if(array[a] = array[b])

Lại dính 1 lỗi “huyền thoại”: so sánh dùng dấu = hay ==?

2 Likes

@SITUVN.gcd được gòi nè

lỗi muôn thửa tkhi mới học c++ :laughing:

1 Like

Bài 3 của mình

    int32_t arr[] = {4, 6, 2, 2, 1, 6, 2, 9, 9, 4};
    int32_t n = sizeof(arr) / sizeof(arr[0]);
    int32_t delete_position = -1;
    for (int32_t i = 0; i < n; i++) {
        for (int32_t j = i + 1; j < n; j++) {
            if (arr[i] == arr[j]) {
                delete_position = j;
                for (int32_t i = delete_position; i < n; i++) {
                std::swap(arr[i], arr[i + 1]);
                }
                n--;
            }
        }
    }

    for (int32_t i = 0; i < n; i++) {
        std::cout << arr[i] << " ";
    }

EDIT (@library): Tớ edit giúp cậu rồi. Cơ mà cậu nên học Markdown để format code lần sau nhé!

xin lỗi mình ko biết edit =))

tui nghĩ đoạn giải thích code thực hiện đẩy các phần tử lui sau một ô nhớ lại chọn N-2 là vì mình muốn giá trị N rơi vào phần tử cuối cùng của mảng. Vì N đã được inserting thành N++ (N = 6), mà phần tử cuối cùng của mảng rơi vào ô nhớ N = 4 nên ad mới lấy N-2

Bai 3 cua minh

#include<iostream>
#include<cstdint>
using namespace std;
int main()
{
	int32_t arr[100];
	int N = 10;
	bool check = false;
	cout << "nhap mang" << endl;
	for (int i = 0; i < N; i++)
	{
		cin >> arr[i];
	}
	cout << arr[0] << " ";
	for (int i = 1; i < N; i++)
	{
		for (int j = 0; j < i; j++)
		{
			if (arr[i] == arr[j])
				check = true;
		}
		if (check == false)
		{
			cout << arr[i]<<" ";
		}
		check = false;
	}
	cout << endl;
	system("pause");
	return 0;
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?