-5

最初の 2 つのパラメーターが同じサイズの整数の配列であり、3 番目のパラメーターが各配列のサイズを示す整数である関数 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これを使用すると、実際の変数の値が減少するため、毎回1ずつ減少します。

于 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の値を比較配列のサイズ-iと比較する必要があります。したがって、カウンターがインクリメントするたびに、反対側の配列のサイズ-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;

基本的に、配列を 1 つずつ調べます。値のいずれかが他の配列の適切な値と同じでない場合、それは逆ではないため、0 を返します。通過せずに for ループから抜けると、 、ifそれはそれらが逆であることを意味するので、1 を返します。

于 2012-12-13T07:05:05.083 に答える
1

変数「サイズ」は決して変更されないため、常に配列 1 の要素を配列 2 の最後の要素に対してチェックしています。

これは宿題のように聞こえるので、そこから進められるかどうか見てみましょう。

于 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 に答える