30/09/2018, 22:47

Chèn số X vào đằng sau các số nguyên tố có trong mảng

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 << "
Nhap 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 << "
Nhap so luong phan tu: ";
		cin >> n;
		if (n < 0 || n > MAX)
			cout << "
So luong phan tu khong hop le";
	} while (n < 0 || n > MAX);
	NhapMang(a, n);
	XuatMang(a, n);
	int Sochen;
	cout << "
Nhap 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

Lưu Thành Vương viết 00:49 ngày 01/10/2018

if (IsPrime(Sochen))
i++;

Đoán là do thằng này. Trường hợp Sochen là số nguyên tố nhưng ko được chèn vào mà vẫn i++ nên dẫn đến sót thằng a[i] kế tiếp…

Lưu Thành Vương viết 00:50 ngày 01/10/2018

Giải pháp:

if (IsPrime(a[i])){
		ThemPhanTu(a, n, i + 1, Sochen);
		if (IsPrime(Sochen))
			i++;
}
Tao Không Ngu. viết 00:49 ngày 01/10/2018

This post was flagged by the community and is temporarily hidden.

Người bí ẩn viết 01:00 ngày 01/10/2018

Giải pháp:

Nó vẫn vậy bạn à, không hết lỗi được

Hình như chèn số nguyên tố thì nó bị lỗi, còn chèn hợp số thì nó vẫn add vô bình thường

@Phong_Ky_Vo cách viết tắt khá hay, nhưng vẫn bị lỗi anh ơi ^_^!

Người bí ẩn viết 00:57 ngày 01/10/2018

Yeah, tìm ra lỗi rồi, Debug là thiên sứ tìm lỗi (lười debug nên không biết lỗi ở đâu)

P/S: Cách của bạn @Luu_Thanh_Vuong đúng đấy, nhưng khổ một nỗi mình mở nhầm Project nên …

Tao Không Ngu. viết 01:02 ngày 01/10/2018

This post was flagged by the community and is temporarily hidden.

Bài liên quan
0