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

tutorial
basic
c++

(Nguyen Kien) #43

Viết lại bài ba cho đẹp hơn :slight_smile:

#include <iostream>

int main(){

	int a[] = {4, 6, 2, 2, 1, 6, 9};
	int N = sizeof(a) / sizeof(int);

	for (int i = 0; i < N; ++i){
		for (int j = i + 1; j < N; ++j){

			if (a[j] == a[i]){
				for (int t = j + 1; t < N; ++t) {

					a[t - 1] = a[t];
				}

				--j;
				--N;
			}
		}
	}

	for (int i = 0; i < N; ++i)
		std::cout << a[i] << " ";
	
	system("pause");
	return 0;
} 

(Nguyen Kien) #44

Bài 1: Ngắn gọn hơn

#include <iostream>

int main() {

	int arr[] = { 1, 2, 3, 4, 5, 6 };
	int num = sizeof(arr) / sizeof(int);

	for (int i = num - 1; i >= 0; --i) 
		std::cout << arr[i] << "  ";

	system("pause");
	return 0;
}

(Nguyen Kien) #45

Bài 3: sửa lại một chút

// In ra các phần tử trong mảng không bị lặp lại

#include <iostream>

using namespace std;

int main() {

	int arr[] = { 4, 6, 2, 2, 1, 6, 9 };
	int num = sizeof(arr) / sizeof(int);

	for (int i = 0; i < num; ++i) {

		bool flag = 1;

		for (int j = 0; j < i; ++j) {

			if (arr[j] == arr[i]) {

				flag = 0;
				break;
			}
		}

		if (flag)	cout << arr[i] << "  ";
	}

	system("pause");
	return 0;
}

(Nguyen Kien) #46

Bài 2:

// So sánh tổng các phần tử chẵn với tổng các phần tử lẻ trong mảng một chiều

#include <iostream>

int main() {

	int a[] = { 3, -2, 5, 4, -8, 10, 12, 17, 0 };
	int num = sizeof(a) / sizeof(int);

	int tc = 0;
	int tl = 0;

	for (int i = 0; i < num; ++i) {

		if (a[i] % 2 == 0)	tc += a[i];
		if (a[i] % 2 != 0)	tl += a[i];
	}

	(tc > tl) ? std::cout << "\n tong chan lon hon tong le\n" : 
		std::cout << "\n tong chan nho hon hoac bang tong le\n";

	system("pause");
	return 0;
}

(Abc) #48

Bài 3:
// Mọi người tham khảo và góp ý dùm mình bài này đã tối ưu hay chưa? Còn cách nào khác nhanh hơn không cho mình tham khảo. Cảm ơn!

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

void main()
{
	//a nhận các giá trị nhập vào. b lưu các giá trị đã xuất ra màn hình.
	int a[100], b[100];
	cout << "Enter number of element: ";
	int n, i, j;
	cin >> n;

	for (i = 0; i < n; i++)
	{
		cout << "a[" << i << "] = ";
		cin >> a[i];
	}

	int number_of_array = 0; // Số lượng hiện tại của mảng b. Tức là các giá trị đã xuất ra màn hình.
	bool check;
	
	for (i = 0; i < n; i++)
	{
		// Kiểm tra số A[i] có trùng với những số đã xuất ra hay chưa.
		check = true; 
		for (j = 0; j < number_of_array; j++)
		{
			if (a[i] == b[j])
			{
				check = false;
				break;
			}
		}
		// Kiểm tra đã trùng số đã xuất ra hay chưa, chưa thì in và lưu giá trị của số vừa xuất ra.
		if (check) 
		{
			cout << a[i] << " ";
			b[number_of_array] = a[i];
			number_of_array++;
		}
	}

	cout << endl;
	system("pause");
}

(Lê Khôi) #49
// why (N - 2)?
for (int32_t i = N - 2; i >= insert_position; i--) {

	int32_t after_i = i + 1;
	arr[after_i] = arr[i];
}

mn giai thich ho em dieu kien nay voi


(HaoND) #50

bài 1:

int main()
{
	//initialize array
	int32_t arr[] = { 2, 6, 5, 7, 9, 1, 3 }; 
	int32_t N = sizeof(arr) / sizeof(int32_t); //tinh gia tri cua mang
	//chay mang tu a[n-1] den a[0] 
	for (int32_t i = N  - 1; i >= 0; i--)  
	{
		cout << arr[i];
	}
		_getch();
		return 0;
	
}

(Nguyễn Văn Ninh) #51

Code bài 3 của e như này được ko ạ,

#include <iostream>

using namespace std;

int main()
{
	int arr[]={5,2,4,5,2,3,1,5,3,2};
	int n=sizeof(arr)/sizeof(int);
	int i=0,j=0,k=0;
	for(i=0;i<n;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(arr[i]==arr[j])
				{
					for(k=j;k<n;k++)
						arr[k]=arr[k+1];
						n--;
				}
		}
	}
	for(i=0;i<n;i++)
	cout<<arr[i]<<"\t";

	system("pause>nul");
	return 0;
}

(Truong Quang Tinh) #53

Cho mình hỏi chỗ j-- là sao vậy mọi người?

int main() {
    int mangbatky = { 4, 6, 2, 2, 1, 6, 9, 8, 4, 5, 10, 4, 4, 4, 4, 4, 10, 8, 4, 4, 8, 1, 15 };
    int soluong = sizeof(mangbatky) / sizeof(int);
    for (int i = 0; i < soluong; i++) {
        for (int j = i+1; j < soluong; j++) {
            if (mangbatky[j] == mangbatky[i]) {
                for (int t = j + 1; t < soluong; t++) {
                    int before_t = t - 1;
                    mangbatky[before_t] = mangbatky[t];
                }
                j--;
                soluong--;
            }
        }
    }
    for (int i = 0; i < soluong; i))
        cout << mangbatky[i] << " ";
    cout << endl;
    system("pause");
    return 0;
}

(Nhật Hào) #54

Cho em hỏi tại sao index trong bài insert position là index = N - 2 với ạ :fearful:
Theo em nghĩ với cách như vậy thì biến trong mảng cuối sau khi N++ không được gán giá trị nào hết.

//inserting
	N++;
	for (int32_t i = N - 2; i >= insert_position; i--) {

		int32_t after_i = i + 1;
		arr[after_i] = arr[i];
	}
	arr[insert_position] = insert_value;

(Shiharoku) #55

N là size của mảng ban đầu. Do đó phần tử cuối cùng có index là N - 1.

Sau khi tăng N lên (N++, do thêm 1 phần tử vào mảng) thì index của phần tử cuối cùng của mảng (ban đầu) phải là N - 2.

Mình thấy code trên không có vấn đề gì. Hay bạn còn thắc mắc chỗ nào.


(Nhật Hào) #56

Vâng cảm ơn sau khi post commect này lên thì em mới hiểu ra :v


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