Witam,mam problem z tablicami.Otóż,mam tablice s[10][10] wypełnioną losowymi liczbami ,mam podać długość najdłuższej linii pionowej (czyli ciągu kolejnych liczb w tej samej kolumnie
), złożonej z liczb tej samej wartości,ma ktoś jakiś pomysł?z góry dzięki za pomoc
Masz podać tylko długość? Po prostu przeiteruj całą tablicę i zliczaj gdzie s[i][n] == s[i-1][n]
, największy osiągnięty wynik pamiętaj w osobnej zmiennej.
Tak to wygląda w pseudokodzie:
def search(xs){
max = 1
for n from 0 to length(xs) - 1{
elem = xs[n]
cnt = 1
for k from n + 1 to length(xs){
if xs[k] = elem:
cnt += 1
else:
break
}
if cnt >= max:
max = cnt
}
return max
}
jako xs
podajesz w pętli kolejne kolumny macierzy; Musisz jeszcze zapamiętywać te maxima dla każdej kolumny w jakiejś tablicy i zwrócić z niej maximum(albo po prostu śledzić maxima i zwrócić z nich maksymalną wartość, ufff:))
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int maks=0;
int ile=0;
int s[5][5];
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
cin>>s[i][j];
if(s[i][j]==s[i-1][j])ile++;
if(ile>maks)maks=ile;ile=0;
}
}
cout<<maks;
return 0;
}
napisałem taki kod,ale niestety,ale nie działa,gdzie tkwi błąd ?
W tym że ten kod nie ma sensu?
if(s[i][j]==s[i-1][j])ile++;
co sie stanie kiedy i==0
? Odwołasz się do s[-1][...]
, co wielkiego sensu chyba nie ma. Tzn to C++ więc najpewniej nadpiszesz sobie kawałek pamieci obok tej tablcy, ale raczej nie to było twoją intencją.
Ale Kombinujesz, Spróbuj przepisać, to co napisałem, bo działa:) i Wrzuć to w pętlę:
max = 1
for k from 0 to length(matrix){
tmp = search(matrix[][k])
if tmp >= max:
max = tmp
}
Nie jestem pewien czy taka jest składnia dostania się do kolumn macierzy w C++, ale na pewno ktoś kto wie dołoży swoje trzy grosze:)