Другие языки программирования и технологии

Подскажите алгоритм

Желательно на С,но можно и в общем виде. Вообщем есть двумерный массив произвольного размера А.Нужно сложить друг с другом все a[j] ,у которых совпадает сумма i+j.
Rustam Ibragimov
Rustam Ibragimov
407
стремненько... но работает.. .
/* -code- */
#include <iostream.h>
#define n 10
#define m 10
int main(int argc, char* argv[] )
{
int a[n][m];
for (int i=0;i<n;i++ ){
for (int j=0;j<m;j++ ){
a[i][j]=rand( )%9;
}
}
int kn;
int km;
for (int i=0;i<n;i++ ){
for (int j=0;j<m;j++ ){
kn =i+j;
if (kn <= n || kn <=m ){
if (kn != j && kn != i ){
int sum=a[i][j]+a[kn][0]+a[0][kn];
cout << "a["<<i<<","<<j<<"]("<<a[i][j]<<" ) + ";
cout << "a["<<kn<<","<<0<<"]("<<a[kn][0]<<" ) + ";
cout << "a["<<0<<","<<kn<<"]("<<a[0][kn]<<" ) = ";
cout <<sum<<endl;
}
else {
int sum=a[0][kn]+a[kn][0];
cout << "a["<<i<<","<<j<<"]("<<a[i][j]<<" ) + ";
cout << "a["<<j<<","<<i<<"]("<<a[j][i]<<" ) = ";
cout <<sum<<endl;
}
}
else {
cout << "a["<<i<<","<<j<<"]"<<" + ";
cout << "a["<<kn<<","<<0<<"]"<<" + ";
cout << "a["<<0<<","<<kn<<"]";
cout <<" = index failed"<<endl;
}
}
}
system("pause" );
return 0;
}
Зайниддин Худайбердиев
Зайниддин Худайбердиев
4 924
Лучший ответ
создаешь отдельный массив размерностью i+j-1, назовем его, к примеру, А, обнуляешь его
далее три цикла: for (counter=0;....) for (i=0;....) for(j=0;....) if (i+j==counter) А [counter]+=начальный_массив [ i ][ j ];

P.S.: пытался разобраться с кодом Романа - сломал голову, либо у него ошибка и некоторые числа срезает при подсчете на переходах между строками матриц, либо мне пора идти спать)
там где куча ноликов в формулах и сиаутах тоже не пойму что происходит
в отдельном массиве надо сохранить i+j, и этот массив будет ключем для определения условия.. . вообщем для проверки двумерных массивов надо вставить двойной цикл типа: for (i=0;....) { for(j=0;....) { тут операторы} }
С чем сумма совпадает?
Evgeniy J.
Evgeniy J.
553