CExercise_07_1指针和数组_5检查一个整数数组是否是回文,即正序与倒序相同
题目:
5.编写一个函数,检查一个整数数组是否是回文,即正序与倒序相同。例如[1,2,3,2,1]就是回文的。要求使用指针的算术运算,不要使用取下标[]运算符。
关键点
想明白回文数组为偶数是start<end,比到一半就完全确定了.到两者相等只有一个的奇数数组时,也确定是回文数了.
所以判断条件start<end.指针指向的数对称相等. 所以回文数比完了一半,没有出现false,就确定为true.
分析:
:
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
/*
编写一个函数,检查一个整数数组是否是回文,即正序与倒序相同。
例如[1,2,3,2,1]就是回文的。要求使用指针的算术运算,不要使用取下标[]运算符。
整个实现的过程非常类似于数组逆序
用两个指针指向数组开头和末尾
然后两个比较指针指向的元素,若任意元素不相等,就不是回文数组
*/
bool is_palindrome(int *arr, int len) {//int *arr指向首元素数组的指针.
int *start = arr; // 指向数组首元素
int *end = arr + len - 1; // 指向数组尾元素
// 首尾指针未相遇,那就继续移动指针比较两个元素的值
while (start < end) {
if (*start != *end) { // 如果两个指针指向的元素不相等,则不是回文数组
return false;
}
start++;
end--;
}
return true; // 所有对应元素检查结束,都相等,则是回文数组
}
int main(void) {
int arr1[] = { 1, 2, 3, 2, 1 };
int arr2[] = { 1, 2, 3, 4, 5 };
printf("arr1 is %s\n", is_palindrome(arr1, 5) ? "是回文数组" : "不是回文数组");
printf("arr2 is %s\n", is_palindrome(arr2, 5) ? "是回文数组" : "不是回文数组");
return 0;
}
解决方案总结:
: