对回文的回答是错误的

时间:2016-01-27 16:41:13

标签: c++ palindrome

我编写了回文程序。 我认为这段代码是正确的is_palindrome程序。 但我不知道为什么这个答案是错误的。

因为当我输入2 1 1时,返回必须是这是回文。 但它回答了另一个问题。

#include <iostream>
using namespace std;

bool is_palindrome(int input[], int numOfSlots);

int main(void) {
    int n;
    cin >> n;
    int *input = new int[n]; // A dynamic array with n slots
    for (int i = 0; i < n; i++) {
        cin >> input[i];
    }

    if (is_palindrome(input, n) == true) {
        cout << "This is a palindrome.";
    }
    else {
        cout << "This is NOT a palindrome.";
    }
    return 0;
}

bool is_palindrome(int input[], int numOfSlots) {
    int i = 0;
    while (i < numOfSlots/2)
    {
        if (input[i] != input[numOfSlots-i])
            return false;
        i++;
    }
    return true;
}

2 个答案:

答案 0 :(得分:2)

C ++中的数组是零索引的,因为i初始化为0,在循环input[numOfSlots-i]的第一次迭代超出范围时。

答案 1 :(得分:2)

你要在if (input[i] != input[numOfSlots-i])中过去一个数组的结尾。当i == 0时,input[numOfSlots-i]变为input[numOfSlots],在这种情况下为input[2]。由于input的最后一个有效索引是1,因此您将与垃圾进行比较。你应该

if (input[i] != input[numOfSlots-i - 1])