INFORMATIKA OPTIMALITÁS FELADAT (C++)?
Sajnos öt egyetemi évem alatt nem találkoztam a numere szóval. Amennyit értek:
Csinálj egy láncolt listát, amiben minden elem tárol egy double/float számot. Egyszer kell végigiterálni az összes számon. Egy változóba elmented a szám első előfordulását és békén hagyod (mondjuk mielőtt elkezdesz iterálni beállítasz -1-et, és egy if ággal ellenőrzöd, hogy nagyobb egyenlő-e nullával (ha 0-tól kezded a sorszámozást). A másiknál mindig, ha elérsz a számhoz felülírod a sorszámmal.
1 millió adatra: 0.265231s wall, 0.210000s user + 0.000000s system = 0.210000s CPU (79.2%)
Nem kell minden include, csak van ami bennmaradt. Illetve a kódot könnyen meg tudod formázni ha rákeresel: online clang formatter.
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <sstream>
#include <cmath>
#include <algorithm>
#include <numeric>
#include <random>
template<class T>
typename std::enable_if<!std::numeric_limits<T>::is_integer, bool>::type
almost_equal(T x, T y, int ulp)
{
// the machine epsilon has to be scaled to the magnitude of the values used
// and multiplied by the desired precision in ULPs (units in the last place)
return std::abs(x-y) < std::numeric_limits<T>::epsilon() * std::abs(x+y) * ulp
// unless the result is subnormal
|| std::abs(x-y) < std::numeric_limits<T>::min();
}
int main()
{
int sorszam = 0;
double legnagyobb_szam = 0;
int elso_sorszam = 0;
int utolso_sorszam = 0;
std::ifstream is{"asd.txt"};
for(std::string s; std::getline(is, s);) {
++sorszam;
const double szam = std::stod(s);
if(sorszam == 1) {
legnagyobb_szam = szam;
elso_sorszam = sorszam;
utolso_sorszam = sorszam;
continue;
}
if(szam > legnagyobb_szam) {
legnagyobb_szam = szam;
elso_sorszam = sorszam;
utolso_sorszam = sorszam;
} else if(almost_equal(szam, legnagyobb_szam, 2)) {
utolso_sorszam = sorszam;
}
}
if(sorszam != 0) {
std::cout << elso_sorszam << ' ' << utolso_sorszam << '\n';
} else {
std::cout << "ures volt a fajl\n";
}
}
Elsősorban is köszönöm a válaszokat! :-)
Másodsorban, Első Válaszoló, a feladat romániai informatika érettségi tételből van, csak a magyar érettségizőknek leford1tják magyarra. Viszont például a megadott neveken nem változhatnak, mivel lehet, hogy román nyelvű a javítótanár, és a javítókulcs nincs lefordítva. A numere simán annyit jelent, hogy számok... :-)
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!