我编写了回文程序。 我认为这段代码是正确的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;
}
答案 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])