Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <sstream>
- using namespace std;
- const int max_meret=100;
- const int vsz=5;
- #define BIRO
- ///#define TESZT
- ///Beolvasó függvények
- void beolvasBIRO(int &N, int &K, int h[max_meret][vsz]);
- void beolvasConsol(int &N, int &K, int h[max_meret][vsz]);
- ///Azonosan igazat adó függvény
- bool def(int a){return true;}
- ///2 .. 100 intervallumot ellenőrző függvény
- bool ketto_szaz(int a) { return (a>=2 && a<=100);}
- ///Egész ellenőrzött beolvasás validáló függvénnyel
- int read_int(const string &msg, const string &errmsg, bool valid(int)=def);
- ///Megoldó függvények
- ///1. feladat megoldása: összegzés
- void feladat_1(int N, const int[][vsz], const int[], int vp[]);
- ///2. feladat megoldása:megszámolás
- void feladat_2(int N, const int h[][vsz], int isz[]);
- ///3. feladat megoldása: kiválogatásban eldöntés
- int feladat_3(int N, int K, const int h[][vsz], int mv[]);
- ///4. feladat megoldása: kiválogatásban eldöntés
- int feladat_4(int N, const int h[][vsz],int gy[]);
- ///5. feladat megoldása: rendezés, keresés
- int feladat_5(int N, int K, const int h[][vsz], int vp[], int kj[]);
- ///Buborék rendezéshez csere függvény
- void csere(int& a, int& b)
- {
- int tmp=a;
- a=b;
- b=tmp;
- }
- ///Buborek rendezes
- void Buborek(int N, int p[], int ind[]);
- ///Megoldó program
- int main()
- {
- ///Változók, beolvasás
- int N, K;
- int h[max_meret][vsz];
- #ifdef BIRO
- beolvasBIRO(N,K,h);
- #else
- beolvasConsol(N,K,h);
- #endif // BIRO
- ///Pontozó tömb előállítása
- int pont[max_meret+1] = {0};
- pont[K] = 1;
- for(int i = K-1; i > 0; --i)
- {
- pont[i] = pont[i+1]+2;
- }
- #ifdef TESZT
- cerr << "Pont tomb tartalma:\n";
- for(int i = 0; i < max_meret+1; ++i)
- {
- cerr << pont[i] << " ";
- }
- cerr << endl;
- #endif // TESZT
- ///1. feladat
- ///versenyzok pontjai, összegzés tétel
- int vp[max_meret];
- feladat_1(N,h,pont,vp);
- #ifndef BIRO
- cout << "Versenyzok osszpontszama:\n";
- #endif // BIRO
- for(int i = 0; i < N; ++i)
- {
- cout << vp[i] << " ";
- }
- cout<<endl;
- ///2. feladat
- ///versenyenként az indultak száma, megszámolás tétel
- int isz[vsz];
- feladat_2(N,h,isz);
- for(int i = 0; i < vsz; ++i)
- {
- cout << isz[i] << " ";
- }
- cout<<endl;
- ///3. feladat
- ///minden versenyen pontot szerzo versenyzok, kiválogatásban eldöntés
- int mv[max_meret];
- int db3 = feladat_3(N,K,h,mv);
- cout << db3;
- for(int i = 0; i < db3; ++i)
- {
- cout << " " << mv[i]+1;
- }
- cout<<endl;
- ///4. feladat
- ///legalább egy versenyen gyõztek, kiválogatásban eldöntés
- int gy[max_meret];
- int db4 = feladat_4(N,h,gy);
- cout << db4;
- for(int i = 0; i < db4; ++i)
- {
- cout << " " << gy[i]+1;
- }
- cout<<endl;
- ///5. feladat
- ///Kik jutnak ki az olimpiára?
- ///Összpontszám szerinti csökkenő sorrendbe rendezés, majd megkeressük az utolsó
- ///versenyzőt, aki még kijut: rendezés, keresés
- int db5;
- int kj[max_meret];
- db5 = feladat_5(N,K,h,vp,kj);
- cout << db5;
- for(int i = 0; i <db5; ++i)
- {
- cout << " " << kj[i];
- }
- cout<<endl;
- return 0;
- }
- int read_int(const string &msg, const string &errmsg, bool valid(int))
- {
- int n;
- bool hiba;
- do{
- cout << msg;
- cin >> n;
- hiba=cin.fail();
- if(hiba) cin.clear();
- string tmp=""; getline(cin, tmp);
- hiba = hiba || tmp.size()!=0 || !valid(n);
- if(hiba) cout << errmsg << endl;
- }while(hiba);
- return n;
- }
- void beolvasBIRO(int &N, int &K, int h[max_meret][vsz])
- {
- cin>>N>>K;
- for(int i=0; i<N; ++i)
- {
- for(int j=0; j<vsz; ++j)
- {
- cin>>h[i][j];
- }
- }
- }
- void beolvasConsol(int &N, int &K, int h[max_meret][vsz])
- {
- N=read_int("Hany versenyzo van: ","Legalabb 2 es legfeljebb 100 legyen!\n",ketto_szaz);
- bool hiba;
- do{
- K=read_int("Mennyi a K erteke: ","Legalabb 2 es legfeljebb 100 legyen!\n",ketto_szaz);
- hiba=K>N;
- if(hiba)
- {
- cout<<"K nem lehet nagyobb mint ahany versenyzo van! Add meg ujra!\n";
- }
- }while(hiba);
- //Mátrix beolvasása
- for(int i=0; i<N; ++i)
- {
- string sz;
- do{
- hiba=false;
- cout<<"Add meg az "<<i+1<<
- ". versenyzo eredmenyeit (szokozokkel elvalasztva)\n";
- getline(cin,sz);
- istringstream inp(sz);
- for(int j=0; !hiba && j<vsz; ++j)
- {
- inp>>h[i][j];
- hiba=inp.fail() || h[i][j]<0 || h[i][j]>N;
- }
- hiba = hiba || !inp.eof();
- if(hiba){
- cerr<<"Hibas vagy tul keves/tul sok adat, add meg ujra!\n";
- }
- }while(hiba);
- }
- ///Versenyenként a helyezések megadásának ellenőrzése
- ///Ha H a legnagyobb érték, akkor minden 1..H közötti érték pontosan egyszer fordul elő
- ///Megoldás: HF
- }
- void feladat_1(int N, const int h[][vsz], const int pont[], int vp[])
- {
- for(int i = 0; i < N; ++i)
- {
- int s = 0;
- for(int j = 0; j < vsz; ++j)
- {
- s += pont[h[i][j]];
- }
- vp[i] = s;
- }
- }
- void feladat_2(int N, const int h[][vsz], int isz[])
- {
- for(int j = 0; j < vsz; ++j)
- {
- int db = 0;
- for(int i = 0; i < N; ++i)
- {
- if(h[i][j] > 0)
- {
- ++db;
- }
- }
- isz[j] = db;
- }
- }
- int feladat_3(int N, int K, const int h[][vsz], int mv[])
- {
- int db = 0;
- for(int i = 0; i < N; ++i)
- {
- int j = 0;
- while(j < vsz && h[i][j] > 0 && h[i][j] <= K)
- {
- ++j;
- }
- if(j == vsz)
- {
- mv[db++] = i;
- }
- }
- return db;
- }
- int feladat_4(int N, const int h[][vsz],int gy[])
- {
- int db = 0;
- for(int i = 0; i < N; ++i)
- {
- int j = 0;
- while(j < vsz && h[i][j] != 1)
- {
- ++j;
- }
- if(j < vsz)
- {
- gy[db++] = i;
- }
- }
- return db;
- }
- int feladat_5(int N, int K, const int h[][vsz], int vp[], int kj[])
- {
- for(int i = 0; i < N; ++i)
- {
- kj[i] = i+1;
- }
- Buborek(N,vp,kj);
- #ifdef TESZT
- cerr << "Rendezes utani allapot:\n"
- for(int i = 0; i < N; ++i)
- {
- cerr << vp[i] << " " << kj[i] << endl;
- }
- #endif // TESZT
- int db = K;
- int up = vp[K-1];
- while(db < N && vp[db] == up)
- {
- ++db;
- }
- return db;
- }
- void Buborek(int N, int p[], int ind[])
- {
- for(int meddig = N-1; meddig > 0;)
- {
- int utolso = -1;
- for(int j = 0; j < meddig; ++j)
- {
- if(p[j] < p[j+1])
- {
- csere(p[j],p[j+1]);
- csere(ind[j],ind[j+1]);
- utolso = j;
- }
- }
- meddig = utolso;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement