Xin chào mọi người.
Em đang làm 1 bài tập về Mảng 1 chiều nhưng code bị lỗi, tìm quài không ra nên nhờ mọi người giúp đỡ.
Đề bài: Chèn số X vào đằng sau các số nguyên tố có trong mảng.
Code giải:
void NhapMang(int a[], int n)
{
for (int i = 0; i < n; i++)
{
cout << "\nNhap a[" << i << "] = ";
cin >> a[i];
}
}
void XuatMang(int a[], int n)
{
for (int i = 0; i < n; i++)
cout << a[i] << " ";
}
bool IsPrime(int n)
{
if (n < 2)
return false;
if (n == 2)
return true;
if (n % 2 == 0)
return false;
for (int i = 3; i <= sqrt(n); i += 2)
if (n % i == 0)
return false;
return true;
}
void ThemPhanTu(int a[], int &n, int Vitrithem, int Phantuthem)
{
for (int i = n; i > Vitrithem; i--)
a[i] = a[i - 1];
n++;
a[Vitrithem] = Phantuthem;
}
void ChenSo(int a[], int &n, int Sochen)
{
for (int i = 0; i < n; i++)
{
if (IsPrime(a[i]))
ThemPhanTu(a, n, i + 1, Sochen);
if (IsPrime(Sochen))
i++; // Mục đích: Nếu số chèn là số Nguyên tố thì sẽ bị tràn bộ nhớ khi xét vòng lặp tiếp theo nên ++ để tránh lỗi.
}
}
int main()
{
int a[MAX], n;
do
{
cout << "\nNhap so luong phan tu: ";
cin >> n;
if (n < 0 || n > MAX)
cout << "\nSo luong phan tu khong hop le";
} while (n < 0 || n > MAX);
NhapMang(a, n);
XuatMang(a, n);
int Sochen;
cout << "\nNhap so can chen sau SNT trong mang: ";
cin >> Sochen;
ChenSo(a, n, Sochen);
XuatMang(a, n);
getch();
return 0;
}
Lỗi:
VD: Nhập 3 phần tử lần lượt là 1 , 2 , 5 .
Thêm phần tử X là 3
=> Kết quả: 1 2 3 5 3
Nhưng kết quả của máy: 1 2 5 3
=> Lỗi ở con số 2.
P/S: Hàm kiểm tra Nguyên Tố của mình không hề bị lỗi nhé !
Xin cảm ơn các bạn trước nhiều