2017-07-25 9 views
-2

私は受け取ったヒントを考慮して、モジュラー思考を適用して再度試しました。プログラムが実行されます。配列の要素にハードワイヤリングされた値のセットに応じて、私は出力として、左の要素の合計が右の要素の合計と等しいインデックスを受け取ります。私はこれが運動の目的だったと理解しています。配列の要素 'N'の両側にある要素の合計を比較します(試行2)

この練習ではベクトルを使用しないことを選択しました。なぜなら、配列には位置1への定数ポインタがあることを覚えておく必要があります。したがって、配列が関数に渡されるときには、配列のサイズに沿って配列を渡すこともできますし、配列内の要素数を数えた後、配列サイズとしてcountを使用することもできます。

私の新しい機能コードを批判し、私が間違っていたことを指摘してください。 ありがとうございます。

#include "stdafx.h" 
#include <iostream> 
using namespace std; 

/*************************************** 
* RIGHT SIDE OF ARRAY 
* Calculates sum of elements right of n 
***************************************/ 
int rightSideOfArray(int arrayOne[], int size, int i) 
{ 
    int n = 0; 

    //loop through array and get right hand sum 
    for (int j = 1 + i; j < size; j++) 
    { 

     n += arrayOne[j]; 

    } 
    return n; 


} 


/*************************************** 
* LEFT SIDE OF ARRAY 
* Calculates sum of elements left of n 
***************************************/ 
int leftSideOfArray(int arrayOne[], int size, int i) 
{ 
    int n2 = 0; 

    //find left hand sum 
    for (int j = i - 1; j >= 0; j--) 
    { 
     n2 += arrayOne[j]; 

    } 
    return n2; 

} 



int main() 
{ 
    //define and declare array 
    int const SIZE = 7; 
    int arrayOne[SIZE] = 
    { 1,2,3,4,3,2,1 }; 
    int n = 0; 
    int n2 = 0; 
    int count = 0; 

    //do comparison 
    for (int i = 0; i < SIZE; i++) 
    { 

    //compare right hand and left hand side and return right values 
    if (rightSideOfArray(arrayOne, SIZE, i) == 
    leftSideOfArray(arrayOne,  SIZE, i)) 

    counter++; 
    cout << i << endl; 

} 
    if (counter == 0) 

    cout << -1 << endl; 

system("PAUSE"); 

return 0; 

} 

旧コード:最初の試み 私はこの同じクエリに以前のソリューションを読んで私が間違っていたところ、私は理解することはできません。私が理解している挑戦は、整数配列をループすることです。それぞれの要素 'i'には、 'left side sum'を得るために、すべての要素を 'i'の左側に追加する必要があります。それから私は '右手の合計'を得るために '私'の右側にすべての要素を追加する必要があります。その後、配列の右辺と左辺の合計を比較する必要があります。 両方の合計が等しい場合は、関数が右手と左手の等価が発生したインデックスを返します。そうでなければ-1を返すべきです。

誰も私の答えとして「-1」しか得られない理由を教えてもらえますか?関数のパラメータとして

int equalSidesOfAnArray(int arrayOne[], int n, int n2) 
{ 

    //loop through array and get right hand sum 
    for (int i = 0; i < sizeof(arrayOne); i++) 
    { 

     for (int j = 1 + i; j < sizeof(arrayOne); j++) 
     { 
      n += arrayOne[j]; 
      n2 += arrayOne[j - 1]; 
     } 

     if (n == n2) 
      return arrayOne[i]; 
     else 
      return -1; 

    } 

} 

int main() 
{ 
    // define and declare array 
    int const SIZE = 7; 
    int arrayOne[SIZE] = { 1, 2, 3, 4, 3, 2, 1 }; 
    int n = 0; 
    int n2 = 0; 


    int answer = equalSidesOfAnArray(arrayOne, n, n2); 
    cout << answer << endl; 


    system("PAUSE"); 

    return 0; 

} 
+1

'sizeof(arrayOne)'はポインタのサイズです。 OPの設計目標ではない – chux

+0

'cout << answer << endl;'は無効ですC – chux

+0

私はC++を使用しています。だから、 – Kate

答えて

0

まず、arrayOneは、配列の最初の要素へのポインタであり、sizeof(arrayOne)は、このポインタのサイズではなく、あなたの配列のサイズSIZEです。
main()内でさえ、sizeof(arrayOne)SIZE * sizeof(int)を返します。

C++でコーディングしているので、std::vector/std::arrayを使用し、C配列を破棄します。これで、あなたはこのようなトラブルやmuch moreを救います。

nn2(パラメータとして渡す必要はありません)と、-1を初期化する場所について考えてください。

+0

ありがとう、私はそこから始めよう....そしてはい、私はこれでばかげて新しいです。 – Kate

関連する問題