Wątek przeniesiony 2021-01-17 15:28 z Algorytmy i struktury danych przez kq.

Sumowanie elementów nad i pod przekątną tablicy

0

Witam wszystkich,

Mam do wykonania następujące zadanie:

Proszę napisać algorytm, który dla tablicy dwuwymiarowej sprawdza czy minimalna wartość elementów tablicy nad główną przekątną jest równa maksymalnej wartości elementów pod główną przekątną. Jeśli warunek jest spełniony to wynikiem jest ta wartość. W przeciwnym wypadku wynikiem jest suma elementów z głównej przekątnej.

Np. dla tablicy o 4 wierszach i 4 kolumnach
1 5 1 1
2 3 3 2
2 2 2 2
4 3 5 2

wynikiem jest wartość 1+3+2+2 ponieważ minimum nad przekątną wynosi 1, a maksimum pod przekątną wynosi 5.

Jest ktos w stanie pomóc mi z tym zadaniem w c++?

1

Tytuł wątku jest niepoprawny - nie chcesz sumować elementów nad/pod przekątną tablicy.

W czym konkretnie masz problem?

0

szczerze to we wrszystkim nie wiem jak sie za to zabrac :p wiem o co chodzi w zadaniu, ale nie wiem jak to stworzyć w ładny i przejszysty sposób żeby algorytm mógł to obliczyć

1

Dla kwadratowych tablic, jeśli masz współrzędne: pionową y i poziomą x i rosną one odpowiednio w dół i w prawo, to element znajduje się:

  • nad przekątną gdy x > y
  • na przekątnej gdy x = y
  • pod przekątną gdy x < y

Zacznij od napisania funkcji do wyznaczania:

  • maksimum pod przekątną
  • minimum nad przekątną
  • sumy na przekątnej
2
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;

int main(int n)
{
	vector<vector<int>> tb
	{
		{
			{1,5,1,1},
			{2,3,3,2},
			{2,2,2,2},
			{4,3,5,2},
		}
	};
	int minv=numeric_limits<int>::max(),maxv=numeric_limits<int>::min();
	int sum=0;
	cout<<"sum =";
	for(int y=0;y<tb.size();++y)
	{
		for(int x=0;x<tb.size();++x)
		{
			if(y<x)
			{
				int val=tb[y][x];
				sum+=val;
				minv=min(minv,val);
				maxv=max(maxv,val);
				cout<<" + "<<val;
			}
		}
	}
	cout<<" - "<<minv<<" - "<<maxv<<" = "<<(sum-minv-maxv)<<endl;
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1