Bài toán: Thực hiện xóa hoặc chèn mảng tùy theo chế độ.
Dữ liệu: Vào từ thiết bị nhập chuẩn:
- Dòng đầu tiên chứa số nguyên n – độ dài của mảng a (1 ≤ n ≤ 100),
- Dòng thứ 2 nhập vào giá trị của mảng a.
- Dòng thứ 3 nhập vào chế độ k bằng 0 hoặc 1 tương đương chế độ xóa hoặc chèn mảng.
- Nếu k bằng 0:
- Dòng thứ 4 là 2 số c và d thể hiện vị trí mảng cần xóa.
- Nếu k bằng 1:
- Dòng thứ 4 là số nguyên m - độ dài của mảng b cần chèn (1 ≤ m ≤ 100).
- Dòng thứ 5 là giá trị của mảng b.
- Dòng thứ 6 là số nguyên c thể hiện vị trí của mảng a mà tại đó mảng b được chèn vào.
Kết quả: Đưa ra thiết bị xuất chuẩn, kết quả của quá trình xóa hoặc chèn mảng.
#include <iostream>
using namespace std;
void Nhap(int[], int);
void Chen(int[], int&);
void Xoa(int[], int&);
void Xuat(int[], int);
int main()
{
int n, k, a[1000];
cin >> n;
Nhap(a, n);
cin >> k;
if ( k == 0)
{
Xoa(a, n);
Xuat(a, n);
}
else if ( k == 1)
{
Chen(a, n);
Xuat(a, n);
}
}
void Nhap(int a[], int n)
{
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
}
void Chen(int a[], int &n)
{
int b[1000], m, c;
cin >> m;
Nhap(b, m);
cin >> c;
if(c < 0) return; //vị trí chèn nhỏ hơn 0 thì không chèn được
else
{
for (int i = n, j = 0; j < m; i++, j++) // tạo khoảng trống để chèn
{
a[i] = a[c+j];
}
for(int i = c, j = 0; j < m; i++, j++) // ghi đè mảng b vào chỗ trống của bảng a
{
a[i+1] = b[j];
n++;
}
}
}
void Xoa(int a[], int &n)
{
int c, d, e;
cin >> c >> d;
if (c < 0 || c > n || d < 0) return;
else
{
e = d;
for (int i = c; (n > d) ? (e <= n) : (i <= n) ; i++, e++) // xóa mảng từ vị trí c tới d
{
a[i] = a[e+1];
}
n > d ? n = n - (d - c + 1) : n = c;
}
}
void Xuat(int a[], int n)
{
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
}
Mình nghĩ lâu rồi nhưng vẫn sai.