Вычисление суммы столбцов C

#arrays #c

Вопрос:

Я новичок в программировании на c, по вопросу, который я получил ниже, и мне было предложено добавить блок кода, который вычислял бы сумму каждого столбца в массиве(который задается пользователем) и возвращал индекс столбца, в котором содержится наибольшая сумма. Моей лучшей попыткой было создать 4 суммы и добавить номера каждого столбца к их сумме, но это казалось слишком запутанным, и я не смог заставить это работать, добавил код ниже. Хотел бы увидеть пример того, как это можно сделать, Тай.

 #include lt;stdio.hgt;  #define ROW 3  #define COL 4 void input(int m[][COL]) ; int sumAllMat(int m[][COL]) ;  int main(){  int mat[ROW][COL],sum;  input(mat);  sum =sumAllMat(mat);  printf("sum = %dn", sum); } void input(int m[][COL]) {  int r,c; for (r=0 ; rlt;ROW ; r  ){  printf("n Enter values into row #%d : n", r);  for (c=0 ; clt;COL ; c  )  scanf("%d", amp;m[r][c]); } } int sumAllMat(int m[][COL]) {  int r,c,s=0;  for (c=0 ; clt;COL ; c  )   for (r=0 ; rlt;ROW ; r  )  s  = m[r][c];  return(s); }  

………………………..

 void test(int m[][COL]){  int a,b,c,d,i,j;  for(i=0;ilt;COL;i  ){  for(j=0;jlt;ROW;j  ){  if(i=0){  a =m[i][j];  }  if(i=1){  b =m[i][j];  }  if(i=2){  c =m[i][j];  }  else{  d =m[i][j];  }  }  }  if(agt;bgt;cgt;d){  printf("The column with the biggest sum is column 0");  }  if(bgt;agt;cgt;d){  printf("The column with the biggest sum is column 1");;  }  if(cgt;agt;bgt;d){  printf("The column with the biggest sum is column 2");;  }  if(dgt;agt;bgt;c){  printf("The column with the biggest sum is column 3");;  }  else{  printf("The sum of all columns is even");  }  }  

Комментарии:

1. C не поддерживает цепные сравнения типа agt;bgt;cgt;d (это интерпретируется совсем не так, как можно было бы ожидать). Воспользуйся a gt; b amp;amp; b gt; c amp;amp; c gt; d

2. Очень немногие языки программирования поддерживают математическую нотацию, такую как agt;bgt;cgt;d . С этого не делает. Хотя код будет компилироваться и даже выполняться, он, как правило, не будет делать то, что вы ожидаете.

3. Спасибо, вы попытаетесь запустить код после его обновления

4. Что делать, если количество столбцов не равно 4?

5. @yano Заняло у меня некоторое время, но я заставил его работать, спасибо за помощь.

Ответ №1:

Вы можете решить эту проблему, создав три переменные

  • prevSum : лучшая сумма на данный момент
  • sum : текущая сумма
  • prevIndex индекс самой известной суммы

и затем:

 void test(int m[][COL]){  int prevSum = -1;  int prevIndex = -1;  int sum = 0;  for(i=0;ilt;COL;i  ){  sum = 0;  for(j=0;jlt;ROW;j  ){  sum  = m[j][i];  }  if ((prevIndex lt; 0) || (sum gt; prevSum)) {  prevIndex = i;  prevSum = sum;  }  }  printf("The column with the biggest sum is column %d", prevIndex);  }  

Простое решение и гораздо более динамичное, чем то, с которым вы начали работать.

Комментарии:

1. Я согласен, что это намного проще и короче, чем мое решение спасибо вам за ваше время и помощь, дали мне другой взгляд на проблему

2. @Maorb17 Я рад внести свой вклад. Вы можете рассмотреть возможность принятия этого как правильного ответа, или вы можете рассмотреть возможность добавления своего решения в качестве ответа. Принять ответ можно за два дня, но это также вполне приемлемый подход. Однако, если ответ будет принят на странице, это гарантирует, что любой будущий посетитель, столкнувшийся с подобной проблемой, мгновенно увидит, что проблема может быть решена.

3. @Maorb17 обратите внимание, что здесь очень важно отметить, что этот ответ не предполагает, что количество вычисляемых элементов равно четырем. Таким образом, это будет работать с 5 столбцами или 6 столбцами и т. Д.