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)
Các thao tác cơ bản với mảng một chiều
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
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ì?
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
lỗi muôn thửa tkhi mới học c++
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;
}