检查C中的数组是否对称

我正在研究一个示例问题,它要求我检查用户输入的数组是否对称。 我已经弄清楚如何通过创建另一个数组,以相反的顺序复制第一个数组,然后检查它们是否相互相等。 如下面的代码所示。

#include  int main(void){ #define NUM_ELEMENTS 12 int userArray[NUM_ELEMENTS]; int userArray2[NUM_ELEMENTS]; int i; int tempVal = 0; double sumArray = 0; double aveArray = 0; printf("Enter 12 interger numbers (each one separated by a space):\n"); for(i = 0; i < NUM_ELEMENTS; i++){ scanf_s("%d", &userArray[i]); } for(i = 0; i = 0; i--){ printf("%d ",userArray[i]); } printf("\n"); //Used swap values in the array for(i = 0; i < (NUM_ELEMENTS / 2); i++){ tempVal = userArray[i]; userArray2[i] = userArray[NUM_ELEMENTS - 1- i]; userArray2[NUM_ELEMENTS - 1 - i] = tempVal; } if(userArray[i] == userArray2[i]) printf("\nThis array is symmetric\n"); else printf("\nThis array is NOT symmetric\n"); return 0; } 

因此,如果用户输入1 2 3 4 5 6 6 5 4 3 2 1,则程序返回该arrays是对称的。

我只是好奇是否有更简单的方法来做到这一点?

只需在同一时间向前和向后迭代:

 // i iterates forwards from the start // j iterates backwards from the end // once they pass each other, we're done. for (int i = 0, j = NUM_ELEMENTS - 1; i < j; i++, j--) { if (userArray[i] != userArray[j]) { printf("\nThis array is not symmetric\n"); return 0; // No point in running this function any longer at this point. } } // If the function didn't return in the for loop, the array is symmetrical. printf("\nThis array is symmetric\n"); 

您可以从两侧遍历数组并比较元素:

 int i; int flag = 1; for (i = 0; flag && i <= (NUM_ELEMENTS - 1) / 2); ++i) { if (userArray[i] != userArray[NUM_ELEMENTS - i]) { printf ("Array is not symmetric"); flag = 0; } } if (flag) { printf ("Array is symmetric"); } 

就个人而言,在C中,我只是用指针来做。

 int is_symmetric(const int *s, int num_elements) { const int *begin = s, *end = s + num_elements - 1; while (begin < end) { if (*begin != *end) return 0; ++begin; --end; } return 1; }