Это может показаться длинным, но я перебил это.
Так что у меня проблема не в том, чтобы найти палиндромы, это просто в поиске длины палиндрома, которую я не могу понять и мой код не работает для одиночных ди git палиндромов (да, мы их тоже считаем) так вот код и объяснение:
#include <stdio.h>
#define LEN 9
int *lastEqual(int *p, int *q) {
int *rightmost;
int *temp;
int *zero = p;
while (p <= q) {
if (*zero == *(p + 1)) {
temp = p + 1;
if (temp < q) {
rightmost = temp;
}
}
p++;
}
return rightmost;
}
Что эта функция делает или предполагает делать :
* Для данного массива: { 3 , 6,7,8,7,6,5, 3 , 5 } Если lastEqual вызывается ссылками жирных чисел, он возвращает указатель на 3. (ближайший к концу массива) *
* Для данного массива: {3, 6 , 7,8,7, 6 , 5,3, 5 } Если lastEqual вызывается ссылками на полужирные числа, он возвращает указатель на 6. *
Вот вторая функция:
int isPalindromic(int *p, int *q) {
int *left = p;
int *right = q;
int pali;
while (left < right) {
if (*left == *right) {
pali = 1;
} else {
pali = 0;
}
left++;
right--;
}
return pali;
}
Вот что она делает или должна делать:
Для данного массива: { 3 , 6,7,8,7,6,5, 3 , 5} If isPalindromi c вызывается ссылками на полужирные числа, которые он возвращает 0, так как числа между этими адресами не представляют палиндром.
Для данного массива: {3, 6 , 7,8,7, 6 , 5,3,5} Если isPalindromi c вызывается ссылками на полужирные числа, возвращается 1, поскольку числа между этими адресами представляют палиндром .
А вот основная функция:
int main() {
int *p, *q, *rightmost;
int arr[LEN] = { 3, 6, 7, 8, 7, 6, 5, 3, 5 };
p = arr;
q = p + (LEN - 1);
for (int i = 0; i < LEN; i++) {
if (isPalindromic(p + i, lastEqual(p + i, q)) == 1) {
rightmost = lastEqual(p + i, q);
printf("Palindrome at index %d, length %ld\n", i, &p - &rightmost);
}
}
return 0;
}
И вывод должен быть таким, но я не могу понять, как найти длину и почему она не учитывает одно git число в виде палиндрома, например, 8:
{3,6,7,8,7,6,5,3,5}
, поэтому 3 к 3 не является палиндромом, от 6 до 6 - от 7 до 7, и также следует считать 8, потому что нет пары 8
Выходные данные должны быть такими:
Input Array: {1}
Output: “palindrome at index 0, length: 1”
Input Array: {5, 6, 7, 8, 7, 6, 5, 2, 5}
Output: “palindrome at index 0, length: 7”
Input Array: {2, 7, 6, 11, 10, 11, 6, 5, 3}
Output: “palindrome at index 2, length: 5”
Input Array: {7, 8, 9, 8, 7}
Output: “palindrome at index 0, length: 5”
Input Array: {2, 7, 4, 3, 2, 6, 1, 2, 1}
Output: “palindrome at index 6, length: 3”