🧠 Phân tích bài toán
-
Nhập số nguyên dương
n -
Nhập mảng
agồmnsố nguyên -
Nhập hai số nguyên
kvàxvới0 ≤ k ≤ n -
Chèn giá trị
xvào vị trík- Nghĩa là:
xđứng trước phần tử có chỉ sốk- và sau phần tử có chỉ số
k-1
- Nghĩa là:
-
In mảng sau khi chèn, mỗi số cách nhau 1 dấu cách
👉 Trong C, mảng đánh chỉ số từ 0, nên:
k = 0→ chèn vào đầu mảngk = n→ chèn vào cuối mảng
✨ Ý tưởng đơn giản
- Tạo mảng có kích thước n + 1
- Duyệt từ cuối mảng về vị trí k, dịch các phần tử sang phải
- Gán
a[k] = x - In mảng mới
📌 Ví dụ minh họa
Ví dụ 1
n = 4
a = [1, 2, 3, 4]
k = 1, x = 10
Sau khi chèn:
[1, 10, 2, 3, 4]
Ví dụ 2
n = 3
a = [1, 2, 3]
k = 3, x = 123
Sau khi chèn:
[1, 2, 3, 123]
💻 Code C hoàn chỉnh
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int a[1005];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int k, x;
scanf("%d %d", &k, &x);
// Dịch các phần tử sang phải
for (int i = n; i > k; i--) {
a[i] = a[i - 1];
}
// Chèn x vào vị trí k
a[k] = x;
// In mảng kết quả
for (int i = 0; i <= n; i++) {
printf("%d ", a[i]);
}
return 0;
}
⚠️ Lưu ý quan trọng
- Vòng lặp dịch mảng phải chạy từ cuối về đầu
- Không được dịch từ trái sang phải (sẽ bị ghi đè dữ liệu)
- Luôn đảm bảo mảng đủ lớn (
n + 1)
🌟 Kỹ Thuật Lập Trình
Xem code
#include <stdio.h>
#define MAX 2910
int n;
// Khai báo các hàm
void nhapMang(int a[]);
void chenGiaTriTheoViTriMang(int a[], int k, int x);
void inMang(int a[]);
int main() {
scanf("%d", &n);
int a[MAX];
nhapMang(a);
int k, x;
scanf("%d %d", &k, &x);
chenGiaTriTheoViTriMang(a, k, x);
inMang(a);
return 0;
}
// Nhập mảng
void nhapMang(int a[]) {
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
}
// Chèn giá trị theo vị trí trong mảng
void chenGiaTriTheoViTriMang(int a[], int k, int x) {
n++; // Tăng n lên 1 vì chèn giá trị vào
int tmp[MAX];
int indexA = 0;
for(int i = 0; i < n; i++) {
if(i == k) {
tmp[i] = x;
continue;
}
tmp[i] = a[indexA++];
}
// Copy ngược lại vào mảng a
for(int i = 0; i < n; i++) {
a[i] = tmp[i];
}
}
// In mảng
void inMang(int a[]) {
for(int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
}