C++ beadandó, tanácstalan vagyok. Hogyan tudnám ezt a kódot tökéletes működésre bírni?
A feladat a következő lenne:
Tehát én úgy értelmezem, hogy meg kell nézni minden nap, hogy melyik településen van a legalacsonyabb hőmérséklet, és hogy ugyanezen a településen van-e az előre jósolt hőmérsékletek közül a legmagasabb. Ezeket az eseteket meg kell számolni, és kiírni a képernyőre.
Eddig ezt hoztam össze:
[link] (zárójeleket értelemszerűen törölni)
Tehát megpróbáltam kikeresni és egy tömbben eltárolni minden napra a minimum, és a maximum előre jósolt hőmérsékletet. Aztán pedig for ciklussal leellenőrizni, hogy előfordul-e, hogy adott napon ez a kettő egy sorban van-e. Van 2 darab mintabemenetem, az elsőt azt a fenti képen láthatjátok, arra működik a program, viszont van egy másik (1000x1000-es) minta bemenet, amire már teljesen mást ír ki (sokkal többet számol, és vannak ismétlődő elemek is, valamint nagyjából ugyanez a helyzet, ha minden sor ugyanaz), mint kéne (ezt máshova kell feltöltenem, mert a pastebin már nem engedte:
Alapból azt se értem, hogy ennél pl. hogy lehet az utolsó nap egy megfelelő eset, hiszen ott már nincs is előre jelzett hőmérséklet. Valaki ezt érti? Esetleg rá tudnátok mutatni, hogy hogy lehetne megjavítani ezt a kódot? Egyáltalán jó úton haladok?
Tudom, a kód nem valami szép, de majd szépítgetem, miután rendesen működik.
Előre is köszönöm a válaszokat!
/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
string s = "3 5\n10 15 12 10 10\n11 11 11 11 20\n12 16 16 16 20\n";
void parse (string s)
{
stringstream ss (s);
stringstream resultstrm;
int M; // napok szama
int N; // telepulesek szama
int t; // kiolvasott homerseklet
int K = 0; // kimenet elso szamjegyehez szamlalo
int Tmin; // legkisebb homerseklet adott napon
int Tmax; // eddigi legmagasabb minimum homerseklet
ss >> N;
ss >> M;
int hok[M][N];
int n, m;
for (n = 0; n < N; n++) {
for (m = 0; m < M; m++) {
ss >> hok[m][n];
}
}
Tmax = -10000; // inicializaljuk egy jo kicsi szamra
for (m = 0; m < M; m++) {
Tmin = 10000; // inicializaljuk egy jo nagy szamra
for (n = 0; n < N; n++) {
Tmin = hok[m][n] < Tmin ? hok[m][n] : Tmin;
}
if (Tmin < Tmax) { // ha ezen a napon nagyobb a minimum homerseklet, mint az eddigi csucs, akkor ez lesz az uj csucs
continue;
}
if ( Tmin == Tmax ) { // ezen a napon ugyanolyan meleg a leghidegebb hely, mint az elozo ilyennel, tehat megy az eredmenybe.
resultstrm << m + 1 << " ";
K++;
}
if ( Tmin > Tmax ) { // ezen a napon az eddigi legmelegebbnel is melegebb a leghidegebb telepules, tehat az eredmenyt nullazzuk es ujrakezdjuk.
Tmax = Tmin;
resultstrm.str("");
resultstrm << m + 1 << " ";
K=1;
}
}
cout << K << " " << resultstrm.str();
}
int main ()
{
parse (s);
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!