#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 столбцами и т. Д.