✨ Mô tả bài toán
📌 Bài tập thực hành về mảng 1 chiều
Cho một số nguyên dương n, và n số nguyên lần lượt là các phần tử của mảng a. Tiếp theo, nhập vào một số nguyên k (0 ≤ k < n).
👉 Nhiệm vụ của bạn:
- Xóa phần tử có chỉ số k trong mảng
- In ra mảng sau khi đã xóa, mỗi phần tử cách nhau đúng một khoảng trắng
🧠 Phân tích nhanh
- Mảng không tự động co giãn, nên khi xóa phần tử tại vị trí
k - Ta cần dịch các phần tử phía sau sang trái
- Giảm kích thước mảng đi 1 đơn vị
📥📤 Ví dụ minh họa
🔹 Test mẫu 1
Input
4
1 2 3 4
1
Output
1 3 4
📝 Giải thích:
Với n = 4, a = [1, 2, 3, 4], k = 1 → xóa phần tử 2
🔹 Test mẫu 2
Input
3
1 2 3
2
Output
1 2
📝 Giải thích:
Với n = 3, a = [1, 2, 3], k = 2 → xóa phần tử 3
🧩 Code C – Xóa phần tử mảng (viết trong main)
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int a[n];
// Nhập mảng
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int k;
scanf("%d", &k);
// Xóa phần tử tại vị trí k
for (int i = k; i < n - 1; i++) {
a[i] = a[i + 1];
}
// Giảm kích thước mảng
n--;
// In mảng sau khi xóa
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
🧠 Tư duy nhanh (ghi nhớ khi đi thi)
- ❌ Mảng không xóa trực tiếp được
- 👉 Phải dịch trái từ vị trí
k - 📉 Giảm
nđi1 - 🖨️ In mảng mới
⚠️ Lỗi hay gặp
- Dịch từ
i = 0❌ (phải từk) - Duyệt tới
i < n❌ (phải làn - 1) - Quên giảm
n--❌
🎯 Mục tiêu bài học
✅ Hiểu cách xóa phần tử trong mảng
✅ Nắm rõ chỉ số (index) trong mảng
✅ Luyện tư duy dịch phần tử & quản lý kích thước mảng
🌟 Kỹ Thuật Lập Trình
Xem code
#include <stdio.h>
#define MAX 2910 // Cung cấp bộ nhớ cho mảng
int n; // Chiều dài mảng
// Khai báo các hàm
void nhapMang(int a[]);
void xuatMang(int a[]);
void xoaPhanTuTrongMang(int a[], int k);
int main() {
scanf("%d", &n);
int a[MAX];
nhapMang(a);
int k;
scanf("%d", &k);
xoaPhanTuTrongMang(a, k);
xuatMang(a);
return 0;
}
// Nhập mảng
void nhapMang(int a[]) {
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
}
// Xuất mảng
void xuatMang(int a[]) {
for(int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
}
// Xóa phần tử
void xoaPhanTuTrongMang(int a[], int k) {
int tmp[MAX];
int indexTmp = 0;
for(int i = 0; i < n; i++) {
if(i != k) {
tmp[indexTmp++] = a[i];
}
}
n = indexTmp;
for(int i = 0; i < n; i++) {
a[i] = tmp[i];
}
}