Другие языки программирования и технологии
Подскажите алгоритм
Желательно на С,но можно и в общем виде. Вообщем есть двумерный массив произвольного размера А.Нужно сложить друг с другом все a[j] ,у которых совпадает сумма i+j.
стремненько... но работает.. .
/* -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;
}
/* -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;
}
создаешь отдельный массив размерностью i+j-1, назовем его, к примеру, А, обнуляешь его
далее три цикла: for (counter=0;....) for (i=0;....) for(j=0;....) if (i+j==counter) А [counter]+=начальный_массив [ i ][ j ];
P.S.: пытался разобраться с кодом Романа - сломал голову, либо у него ошибка и некоторые числа срезает при подсчете на переходах между строками матриц, либо мне пора идти спать)
там где куча ноликов в формулах и сиаутах тоже не пойму что происходит
далее три цикла: 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;....) { тут операторы} }
С чем сумма совпадает?
Похожие вопросы
- Программисты, подскажите алгоритм, пожалуйста, очень нужно(Паскаль)!
- подскажите алгоритм на .bat
- подскажите алгоритм решения задачи: Действительное число а. Использовать только умножение. Получить а^64 за 6 операций.
- Подскажите алгоритм, как определить сколько различных символов входят в текст?
- паскаль. подскажите алгоритм
- C# C++ Как сделать, чтобы при появлении форма раскручивалась в центре экрана.(подскажите алгоритм)
- как найти в массиве слова содержащие более 5 букв (делфи) подскажите алгоритм нахождения таких слов (делфи)
- подскажите алгоритм решения 386 задачи на acmp.ru http://www.acmp.ru/index.asp?main=task&id_task=386
- Как найти кол-во одинаковых элементов в массиве? Подскажите алгоритм.
- Можете подсказать алгоритм для решение задачи?