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

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

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

Kacper Jachim
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
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++?

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
1

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

W czym konkretnie masz problem?

Kacper Jachim
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
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ć

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
#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;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.