Code kiểm tra mảng đối xứng bị sai

#include<iostream>

using namespace std;

bool symmetry(int *a, int n)
{
	int j = 1,count=0;
	for (int i = 0; i < n; i++)
	{
		if (a[i] != a[n - j])
		{
			return false;
			break;
		}
		else//a[i]=a[n-j]
			count++;
		j++;
	}
	int temp = (n - 1) / 2;
	if (n % 2 != 0)
	{
		if (count == temp)
			return true;
		else
			return false;
	}
	else
	{
		if (count == (n / 2))
			return true;
		else
			return false;
	}
}

int main()
{
	int n,a[100];
	cout << "enter n: ";
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cout << "a[" << i << "] = ";
		cin >> a[i];
	}
	if (symmetry(a, n))
		cout << "YES" << endl;
	else 
		cout << "NO" << endl;
	system("pause");
	return 0;
}

mình viết chương trình tìm xem mảng(a,n) có phải là mảng đối xứng không. vd 1 2 3 2 1 là mảng đối xứng. mình viết được đoạn thế này thấy hợp lý nhưng khi chạy lại ra kết quả không đúng. không biết mình sai ở đâu ạ?

Tại sao không phải là:

if (a[i] != a[n - i]) // i

Viết kiểm tra đối xứng dễ mà chỉ 1 vài dòng là xong, nhưng bạn viết dài loằng ngoằng quá.
1 lặp, 1 if, 1 return false và 1 return true là xong.

1 Like
if (a[i] != a[n - 1 - i]) // i

chứ.

5 Likes

Chú ý, với kiểu dữ liệu số nguyên, kết quả là phép chia nguyên. 4 / 2 == 25 / 2 == 2

bool symmetry(int* a, int n)
{
    for (int i = 0; i < n / 2; i += 1)
        if (a[i] != a[n - 1 - i])
            return false;
    return true;
}
3 Likes

chế dzậy được hem :V

bool symmetry(int* a, int n)
{
    int* b = a + n - 1;
    while (a < b && *a++ == *b--);
    return a >= b;
}

edit cái: a >= b mới đúng :V

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?