Не поленитесь пожалуйста дочитать.
Дана действительная матрица [Ai,j] размера nxn. Получить действительную матрицу [Bi,j ], элемент которой b[i,j] равен сумме элементов данной матрицы, расположенных в области, определяемой индексами i,j так, как показано на рисунке
+------------------+
| |
|-----------a[i][j] |
| | |
| | |
| | |
+--------------------+
Вобщем, например дана матрица
1 5 4 7
3 8 5 9
5 9 3 8
7 8 2 5
Ограничивающая область будет
0 0 0 0
3 8 5 0
5 9 3 0
7 8 2 0
Таким образом, надо заменить 7 суммой 3 + 8 + 5 + 5 + 9 + 3 + 7 + 8 +2 ;
5 суммой 3 + 8 + 5 + 5 + 9 + 3 ;
3 суммой 3 + 8 + 5 ;
8(последняя строка вторая цифра) суммой 8 + 2 + 9 + 3 + 8 + 5;
9 суммой 9 + 3 + 8 + 5;
8 суммой 8 +5;
и 2 суммой 2 + 3 + 5;
3 суммой 3 +5;
5 пятеркой.
Вот мое решение:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
int i, j, l, k, s;
void main()
{
clrscr();
const int n = 4;
int a[n][n];
int b[n][n];
s = 0;
randomize();
for (i = 0; i <n; i++)
{
for (j = 0; j < n; j++)
{
a[i][j] = random(9) + 1;
cout << a[i][j] << " ";
}
cout << endl;
}
cout << "\n Rezult: \n";
for (i = 0; i < n; i++)
{ for (j = 0; j < n ; j++)
{
for ( l = 1; l < i ; l++)
for (k = j; k < n - 1 ; k++)
s += a[l][k];
b[i][j] = s;
cout << b[i][j] << " ";
s = 0;
}
cout << endl;
}
getch();
}
Цикл
for ( l = 1; l < i ; l++)
for (k = j; k < n - 1 ; k++)
должен быть не такой, а вот какой?до меня че-то не доходит, точнее есть предположения, но ни одно из них не срабатывает...
упс, рисунок неправтльно вышел
+------------------------+
| |
|-------------a[i][j] |
| | |
| | |
| | |
+------------------------+
упс, рисунок неправильно вышел
+------------------------+
| |
|-------------a[i][j] |
| | |
| | |
| | |
+------------------------+
не выходит, вобщем можно по пример смотреть
[C++] Подскажите в задачке цикл plz.
Started By desert_rose, дек 20 2006 22:01
5 ответов в этой теме
#2
Отправлено 21 декабря 2006 - 11:18
Общий цикл должен выглядеть так:
for(int i = n-1; i>0; i--) { for(int j = 0; j<n; j++) { int sum = 0; for(int k = i; k>0; k--) { for(int l = j; l<n-1; l++) { sum += array[k-1][l]; } } tmp[i][j] = sum; } }
Сообщение изменено: shb (21 декабря 2006 - 11:19 )
Мыслящий человек просто обязан время от времени поднимать себя за волосы © Тот самый Мюнгхаузен
Joga Bonito!
Joga Bonito!
#5
Отправлено 21 декабря 2006 - 20:39
desert_rose,
Не знаю
Скажу одно - твое, по твоим же словам, не работает
Мое - работает
!!!----- Внимание - нерабочий код -----!!!
С первого взгляда неверно:
1) Ты пытаешься посчитать сумму, но при этом при каждом заходе в цикл сумма у тебя равна нулю.
Получается простое присваивание:
все равно что написать
2) С каждым кругом тебе надо брать все меньшее количество элементов матрицы, а ты постоянно берешь начиная с единицы
Не знаю
Скажу одно - твое, по твоим же словам, не работает
Мое - работает
!!!----- Внимание - нерабочий код -----!!!
for ( i = 0; i < n; i++){ for (j = 0; j < n; j++){ for (l = 1; l <= i; l++){ for( k = j; k < n-1; k++){ s += a[l]k]; b[i][j] = s; cout << b[i][j] << " "; s = 0; } cout << endl; } } }
С первого взгляда неверно:
1) Ты пытаешься посчитать сумму, но при этом при каждом заходе в цикл сумма у тебя равна нулю.
Получается простое присваивание:
s = 0; s += a[l]k]; b[i][j] = s;
все равно что написать
b[i][j] = a[l]k];Короче, ты просто копируешь один массив в другой очень сложным способом
2) С каждым кругом тебе надо брать все меньшее количество элементов матрицы, а ты постоянно берешь начиная с единицы
for (l = 1; l <= i; l++)
Мыслящий человек просто обязан время от времени поднимать себя за волосы © Тот самый Мюнгхаузен
Joga Bonito!
Joga Bonito!