1

私はループで演習を行っていますが、疑問があります。

の配列があり、この配列全体を反復処理して、配列要素をints取得したいと考えています。sumこの反復は、各パスで最初の要素と最後の要素を合計し、2 番目の反復で 2 番目の要素と最後の要素から 1 を引いた値を合計するというように実行する必要があります。

要素数が偶数の配列がある場合、次のようにしています。

int main(){
    int i,sum=0,arraySize=10;
    int array[] = {1,2,3,4,4,4,7,8,9,10};

    for (i=0;i <arraySize/2;i++){
        sum+=array[i] + array[arraySize-i-1];
    }

    printf("The sum is %d\n", sum);

    return 0;
}

しかし、私が奇数を持っている場合、私はこれをやっています:

int main(){
    int i,sum=0,arraySize=11;
    int array[] = {1,2,3,4,4,4,7,8,9,10,11};

    for (i=0;i <(arraySize/2)+0.5;i++){
        if (i != (arraySize/2)){
            sum+=array[i] + array[arraySize-i-1];
        }
        else{
             sum+=array[i];
        }
    }

    printf("The sum is %d\n", sum);

    return 0;
}

これは正しい方法ですか?

4

5 に答える 5

3

私は次のようにします:

 for(i=0, j= arraySize-1; i <= j; i++,j--){
   sum += array[i];
   if(i!=j){ sum+= array[j]; }
 }
于 2012-05-09T10:05:05.877 に答える
2

私はこのようにします-本当に必要な場合を除き、フロートは避けてください:

for (i=0; i < (arraySize / 2) + (arraySize & 1); i++) {

(arraySize & 1)奇数の場合は 1、偶数の場合は 0 です。

またはさらに簡単:

for (i = 0; i < (arraySize + 1) / 2; i++) {
于 2012-05-09T10:02:27.840 に答える
1

これは、読みやすさと最小限のブランチ/比較のために最適化されたバージョンです。

#include <stdio.h>
#include <stdio.h>

int calc_sum_in_weird_manner (const int* array, size_t n)
{
  int sum=0;
  const int* begin = &array[0];
  const int* end   = &array[n-1];

  while(begin < end)
  {
    sum += *begin + *end;
    begin++;
    end--;
  }

  if(begin == end) /* odd number */
  {
    sum += *begin;
  }

  return sum;
}


int main()
{
  const int array[] = {1,2,3,4,4,4,7,8,9,10,11};
  int sum;

  sum = calc_sum_in_weird_manner (array,
                                  sizeof(array)/sizeof(int));

  printf("The sum is %d.\n", sum);

  return 0;
}
于 2012-05-09T13:33:27.117 に答える
0
for (i=0;(i <arraySize/2)||(array[i]==array[arraySize-i-1]);i++){
        if (array[i]==array[arraySize-i-1]) {
             sum+=array[i];

        }else{

        sum+=array[i] + array[arraySize-i-1];
        }
    }


    printf("The sum is %d\n", sum);
于 2012-05-09T10:44:43.947 に答える