私は受け取ったヒントを考慮して、モジュラー思考を適用して再度試しました。プログラムが実行されます。配列の要素にハードワイヤリングされた値のセットに応じて、私は出力として、左の要素の合計が右の要素の合計と等しいインデックスを受け取ります。私はこれが運動の目的だったと理解しています。配列の要素 '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;
}
'sizeof(arrayOne)'はポインタのサイズです。 OPの設計目標ではない – chux
'cout << answer << endl;'は無効ですC – chux
私はC++を使用しています。だから、 – Kate