A feladat leírását, melynek a megoldását közzéteszem, innen töltheted le. Az innen letölthető tömörített állományokban megtalálod a Code::Blocks-ban megnyitható projectet, és a feladat a forrásait. A kicsomagoláshoz a 7zip nevű ingyenes programot javaslom.
A feladat megoldása az esetleges központi megoldások logikájától eltérhet. Véleményem szerint nem a trükkös megoldások azok, amelyeket hamarabb kitalál az ember, hanem a több lépésben, de elemi algoritmusok használatával készített megoldás az, amely sok esetben sokkal hamarabb elkészül.
Jöjjön akkor a forráskód:
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <ctime>
using namespace std;
class igeny
{
public:
int ora;
int perc;
int mperc;
int csapat;
int honnan;
int hova;
string toString()
{
stringstream ss;
ss << "Ora: " << ora << ", perc: " << perc <<
", mperc: " << mperc << ", csapat: " <<
csapat << ", honnan: " << honnan <<
", hova: " << hova << endl;
return ss.str();
}
};
int main()
{
// 1. feladat
ifstream input("igeny.txt");
int maxszint;
int csapatszam;
int meret;
input >> maxszint;
input >> csapatszam;
input >> meret;
igeny igenyek[meret];
for( int i = 0; i < meret; i++ )
{
input >> igenyek[i].ora >> igenyek[i].perc >> igenyek[i].mperc >>
igenyek[i].csapat >> igenyek[i].honnan >> igenyek[i].hova;
// cout << igenyek[i].toString();
}
input.close();
// 2. feladat
cout << endl << "2. feladat" << endl;
cout << "Kerem a lift indulasi helyet! ";
int start;
cin >> start;
// 3. feladat
cout << endl << "3. feladat" << endl;
cout << "A lift a " << igenyek[meret-1].hova <<
" szinten all az utolso igeny teljesitese "
"utan." << endl;
// 4. feladat
cout << endl << "4. feladat" << endl;
int min = start;
int max = start;
for( int i = 0; i < meret; i++ )
{
if( igenyek[i].honnan < min )
{
min = igenyek[i].honnan;
}
if( igenyek[i].hova < min )
{
min = igenyek[i].hova;
}
if( igenyek[i].honnan > max )
{
max = igenyek[i].honnan;
}
if( igenyek[i].hova > max )
{
max = igenyek[i].hova;
}
}
cout << "A legalacsonyabb erintett emelet: " << min <<
endl << "A legmagasabb erintett emelet: "<< max << endl;
// 5. feladat
cout << endl << "5. feladat" << endl;
int utassal = 0;
int nelkul = 0;
for( int i = 0; i < meret; i++ )
{
if( igenyek[i].honnan < igenyek[i].hova )
{
utassal++;
}
}
cout << "Utassal " << utassal << " alkalommal kellett "
"felfele indulni a liftnek" << endl;
for( int i = 1; i < meret; i++ )
{
if( igenyek[i].honnan > igenyek[i-1].hova )
{
nelkul++;
}
}
// ha a kezdo pozicio alacsonyabban van, mint az elso igeny
// kezdo emelete, akkor is utas nelkul haladt
if( start < igenyek[0].honnan )
{
nelkul++;
}
cout << "Utas nelkul " << nelkul << " alkalommal "
"kellett felfele indulni a liftnek" << endl;
// 6. feladat
cout << endl << "6. feladat" << endl;
int csapatdb[csapatszam+1] = {0};
for( int i = 0; i < meret; i++ )
{
csapatdb[igenyek[i].csapat]++;
}
for( int i = 1; i < csapatszam+1; i++ )
{
if( csapatdb[i] == 0 )
{
cout << i << " ";
}
}
cout << endl;
// 7. feladat
cout << endl << "7. feladat" << endl;
srand(time(0));
// [1;csapatszam] intervallum
int vetcsapat = rand() % csapatszam + 1;
// cout << "vetcsapat: " << vetcsapat << endl;
int vetdb = 0;
for( int i = 0; i < meret; i++ )
{
if( igenyek[i].csapat == vetcsapat )
{
vetdb++;
}
}
igeny vetigenyek[vetdb];
int hely = 0;
for( int i = 0; i < meret; i++ )
{
if( igenyek[i].csapat == vetcsapat )
{
vetigenyek[hely] = igenyek[i];
cout << vetigenyek[hely].toString();
hely++;
}
}
bool vetett = false;
for( int i = 1; i < vetdb; i++ )
{
if( vetigenyek[i].honnan != vetigenyek[i-1].hova )
{
vetett = true;
cout << vetigenyek[i-1].hova << " - " <<
vetigenyek[i].honnan << endl;
}
}
if( !vetett )
{
cout << "Nem bizonyithato szabalytalansag." << endl;
}
// 8. feladat
cout << endl << "8. feladat" << endl;
stringstream ss;
int fkod;
string s;
for( int i = 0; i < vetdb; i++ )
{
ss << "Befejezes ideje: " << vetigenyek[i].ora <<
":" << vetigenyek[i].perc << ":" <<
vetigenyek[i].mperc << endl;
ss << "Sikeresseg: ";
cout << "Sikeres volt a feladat (i/n): ";
cin >> s;
if( s == "i" )
{
ss << "befejezett";
}
else
{
ss << "befejezetlen";
}
ss << endl << "-----" << endl;
ss << "Indulasi emelet: " << vetigenyek[i].honnan << endl;
ss << "Celemelet: " << vetigenyek[i].hova << endl;
ss << "Feladatkod: ";
cout << "Kerem a feladatkodot: ";
cin >> fkod;
ss << fkod << endl;
}
// cout << ss.str();
ofstream output("blokkol.txt");
output << ss.str();
return 0;
}
