-5

编写函数 isReverse 的定义,它的前两个参数是大小相等的整数数组,第三个参数是一个整数,表示每个数组的大小。当且仅当一个数组与另一个数组相反时,该函数才返回 true。(此处的“反向”表示相同的元素,但顺序相反。)

int isReverse(int array1[], int array2[], int size)
{ 
    int i;
    for (i=0;i<size;i++)
    {
        if(array1[i] == array2[size-1])
            return 0;
        else
            return 1;
    }
}

我不断收到错误消息。它出什么问题了。

4

7 回答 7

5

当您return从函数中的任何块中执行函数时,函数执行结束,因此在您的情况下,即使数组的第一个元素匹配不正确,您也会从函数返回,您应该检查整个数组,然后从函数返回最后,检查下面的代码:

int isReverse(int array1[], int array2[], int size)
{ 
    int i,status=1;

    for (i=0;i<size;i++) //Size is the length of the array? if yes than you need -1 from it.
    {
        if(array1[i] == array2[size])
        {
            status=0;
            --size;
        }
        else
            return 1;
    }

    return status;
}

此外,size-1不会改变变量大小本身的值,因此size将在整个循环中保持不变,使用--size这将减少实际变量的值,因此每次将其减一。

于 2012-12-13T07:10:13.283 回答
1

我就是这样做的。

    int isReverse(int array1[], int array2[], int SIZE)
    {
    for( int counter = 0; counter <= SIZE/2; counter++ )
    if(array1[counter] != array2[SIZE-counter] || array2[counter] != array1[SIZE-counter])
        return 1;
    return 0;
    }

您只是将索引 i 处的值与常量 SIZE-1 进行比较。相反,您希望将 i 处的值与比较数组的 size-i 进行比较。因此,每次计数器增加时,它都会与对面数组的 size-i 进行比较。而且您只需对阵列的一半执行此操作。

于 2012-12-13T07:29:53.080 回答
1

返回值是错误的,因为您只检查每个数组中的 1 个值,而不是全部。你想做的是这样的。

for (i=0;i<size;i++)
{
    if(!(array1[i] == array2[size-i-1])) 
       return 0;
}
return 1;

基本上你一个一个地遍历数组,如果其中任何一个值与另一个数组上的适当值不同,这不是反向,所以我们返回0。如果我们没有经过就退出for循环,if这意味着它们是反向的,所以我们返回 1。

于 2012-12-13T07:05:05.083 回答
1

变量“大小”永远不会改变,因此您总是检查 array1 的元素与 array2 的最后一个元素。

由于这听起来像是一个家庭作业问题,我会让你看看你是否可以从那里开始。

于 2012-12-13T07:07:00.003 回答
0
int isReverse(int a[], int b[], int n)
{
int i = 0;
while (i<n)
{
if (a[i] != b[n-i-1]) {return 0; break;}
else i++;
}
return 1;
}

这是正确的答案。

于 2012-12-13T07:39:44.767 回答
0
  int isReverse(int array1[], int array2[], int size)
  {
      int flag = 0;
      for (int i=0;i<size;i++)
      {
      if(array1[i] != array2[size-1]){
          flag = 1;
          break;
      }
      return flag;
      }
  }

在代码中,您将 return 语句保留在循环内...将 return 语句保留在循环之外并尝试

于 2012-12-13T07:05:52.123 回答
0
bool isReverse(int array1[], int array2[],int size)
{
    int i=0;
    for (int k=0;k<size;k++){
        if (array1[k]==array2[size-k-1]){
           i++;
        }
    }
    if (i==size){
       return true;
    }else{
       return false;
    }
}
于 2021-10-19T01:16:50.720 回答