@ilya777741

Как по заданой матрице построить другую по формуле?

Текст задачи:

Пусть задана матрица A, размерностью n x n. Необходимо построить матрицу В, причем элементы матрицы строятся по следующей формуле 5b3915fbe9e1c924546880.png где область указана рисунке (прикладываю)

5b39162e7cec0557910011.png

Мой код:
int main()
{
	const int n=8;
	int a[n][n], b[n][n], l=0;

	for(int i=0; i<n; i++)
	{
		a[i][i]=i;
		b[i][i]=0;
	}

	b[0][0] = a[0][0];
	

	for(int i=0; i<n; i++)
	{
		for(int j=1; j<n; j++)
		{
			int min = a[0][0];

			for(int s=i; s<n; s++)
			{
				l=n/4;

				for(int d=j; d<n && n-l!=0; d++)
				{


					if(d<=n/2 && s<=n-l)
					{
						

						if(a[s][d] < min)
							min=a[s][d];	

					}

					
				}

				l++;

			}

			b[i][j]=min;

		}
	}



	for(int i=0; i<n; i++)
	{
		for(int j=0; j<n; j++)
		{
			cout<<b[i][j]<<" ";
		}
		cout<<endl;
	}

	return 0;
}


У меня программа выводит следующее:
5b39177ebada6498246560.png

Поправьте пожалуйста, что не так в коде.. Уже очень долго с ним сижу, не пойму в чём проблема. Спасибо
  • Вопрос задан
  • 243 просмотра
Пригласить эксперта
Ответы на вопрос 1
@FD4A
for(int i=0; i<n; i++)
  {
    a[i][i]=i;
    b[i][i]=0;
  }

Первое: тут явно не все элементы массивов будут инициализированны. Посмотрите как вы выводите двумерный массив на печать в конце:
for(int i=0; i<n; i++)
  {
    for(int j=0; j<n; j++)
    {
      cout<<b[i][j]<<" ";
    }
    cout<<endl;
  }

Аналогично нужно проводить заполнение при помощи двух циклов. Ещё наверное стоит заполнить матрицу а случайными целыми (функция rand()) и выводить обе матрицы а и b.
Заполнение:
for(int i=0; i<n; i++){
    for(int j=0; j<n; j++){
         a[i][j]=rand();
         b[i][j]=-1;
    }
}

Далее во втором цикле начинаем обход столбцов со второго.
for(int j=1; j<n; j++)
Почему не с первого с индексом 0? Ведь нужно получить ответ для каждого элемента в матрице b.

Как только получите правильное заполнение надо взять листочек бумаги и подумать как получать минимум по области тета. В первом столбце матрицы b в i-ой строке явно стоит элемент который меньше всех остальных пройденных до него. Из этого следует, что можно использовать промежуточную матрицу С у которой элемент i,j это минимум в данной части столбца j от его начала до строки i. И тогда если нужно получить b(i,j) нужно просто взять минимальный из элементов на "диагональной" границе области тета в матрице С.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы