SHARE
TWEET

Untitled

a guest Dec 3rd, 2019 75 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <sstream>
  3.  
  4. using namespace std;
  5.  
  6. const int max_meret=100;
  7. const int vsz=5;
  8.  
  9. #define BIRO
  10. ///#define TESZT
  11.  
  12. ///Beolvasó függvények
  13. void beolvasBIRO(int &N, int &K, int h[max_meret][vsz]);
  14. void beolvasConsol(int &N, int &K, int h[max_meret][vsz]);
  15.  
  16. ///Azonosan igazat adó függvény
  17. bool def(int a){return true;}
  18.  
  19. ///2 .. 100 intervallumot ellenőrző függvény
  20. bool ketto_szaz(int a) { return (a>=2 && a<=100);}
  21.  
  22. ///Egész ellenőrzött beolvasás validáló függvénnyel
  23. int read_int(const string &msg, const string &errmsg, bool valid(int)=def);
  24.  
  25. ///Megoldó függvények
  26. ///1. feladat megoldása: összegzés
  27. void feladat_1(int N, const int[][vsz], const int[], int vp[]);
  28.  
  29. ///2. feladat megoldása:megszámolás
  30. void feladat_2(int N, const int h[][vsz], int isz[]);
  31.  
  32. ///3. feladat megoldása: kiválogatásban eldöntés
  33. int feladat_3(int N, int K, const int h[][vsz], int mv[]);
  34.  
  35. ///4. feladat  megoldása: kiválogatásban eldöntés
  36. int feladat_4(int N, const int h[][vsz],int gy[]);
  37.  
  38. ///5. feladat megoldása: rendezés, keresés
  39. int feladat_5(int N, int K, const int h[][vsz], int vp[], int kj[]);
  40.  
  41. ///Buborék rendezéshez csere függvény
  42. void csere(int& a, int& b)
  43. {
  44.     int tmp=a;
  45.     a=b;
  46.     b=tmp;
  47. }
  48. ///Buborek rendezes
  49. void Buborek(int N, int p[], int ind[]);
  50.  
  51. ///Megoldó program
  52. int main()
  53. {
  54.     ///Változók, beolvasás
  55.     int N, K;
  56.     int h[max_meret][vsz];
  57.     #ifdef BIRO
  58.         beolvasBIRO(N,K,h);
  59.     #else
  60.         beolvasConsol(N,K,h);
  61.     #endif // BIRO
  62.  
  63.     ///Pontozó tömb előállítása
  64.     int pont[max_meret+1] = {0};
  65.     pont[K] = 1;
  66.     for(int i = K-1; i > 0; --i)
  67.     {
  68.         pont[i] = pont[i+1]+2;
  69.     }
  70.     #ifdef TESZT
  71.         cerr << "Pont tomb tartalma:\n";
  72.         for(int i = 0; i < max_meret+1; ++i)
  73.         {
  74.             cerr << pont[i] << " ";
  75.         }
  76.         cerr << endl;
  77.     #endif // TESZT
  78.  
  79.     ///1. feladat
  80.     ///versenyzok pontjai, összegzés tétel
  81.     int vp[max_meret];
  82.     feladat_1(N,h,pont,vp);
  83.     #ifndef BIRO
  84.         cout << "Versenyzok osszpontszama:\n";
  85.  
  86.     #endif // BIRO
  87.     for(int i = 0; i < N; ++i)
  88.     {
  89.         cout << vp[i] << " ";
  90.     }
  91.     cout<<endl;
  92.  
  93.     ///2. feladat
  94.     ///versenyenként az indultak száma, megszámolás tétel
  95.     int isz[vsz];
  96.     feladat_2(N,h,isz);
  97.     for(int i = 0; i < vsz; ++i)
  98.     {
  99.         cout << isz[i] << " ";
  100.     }
  101.     cout<<endl;
  102.  
  103.     ///3. feladat
  104.     ///minden versenyen pontot szerzo versenyzok, kiválogatásban eldöntés
  105.     int mv[max_meret];
  106.     int db3 = feladat_3(N,K,h,mv);
  107.     cout << db3;
  108.     for(int i = 0; i < db3; ++i)
  109.     {
  110.         cout << " " << mv[i]+1;
  111.     }
  112.  
  113.     cout<<endl;
  114.  
  115.     ///4. feladat
  116.     ///legalább egy versenyen gyõztek, kiválogatásban eldöntés
  117.     int gy[max_meret];
  118.     int db4 = feladat_4(N,h,gy);
  119.     cout << db4;
  120.     for(int i = 0; i < db4; ++i)
  121.     {
  122.         cout << " " << gy[i]+1;
  123.     }
  124.  
  125.     cout<<endl;
  126.  
  127.     ///5. feladat
  128.     ///Kik jutnak ki az olimpiára?
  129.     ///Összpontszám szerinti csökkenő sorrendbe rendezés, majd megkeressük az utolsó
  130.     ///versenyzőt, aki még kijut: rendezés, keresés
  131.     int db5;
  132.     int kj[max_meret];
  133.     db5 = feladat_5(N,K,h,vp,kj);
  134.     cout << db5;
  135.     for(int i = 0; i <db5; ++i)
  136.     {
  137.         cout << " " << kj[i];
  138.     }
  139.     cout<<endl;
  140.     return 0;
  141. }
  142.  
  143. int read_int(const string &msg, const string &errmsg, bool valid(int))
  144. {
  145.     int n;
  146.     bool hiba;
  147.     do{
  148.         cout << msg;
  149.         cin >> n;
  150.         hiba=cin.fail();
  151.         if(hiba) cin.clear();
  152.         string tmp=""; getline(cin, tmp);
  153.         hiba = hiba || tmp.size()!=0 || !valid(n);
  154.         if(hiba) cout << errmsg << endl;
  155.     }while(hiba);
  156.  
  157.     return n;
  158. }
  159.  
  160. void beolvasBIRO(int &N, int &K, int h[max_meret][vsz])
  161. {
  162.     cin>>N>>K;
  163.     for(int i=0; i<N; ++i)
  164.     {
  165.         for(int j=0; j<vsz; ++j)
  166.         {
  167.             cin>>h[i][j];
  168.         }
  169.     }
  170. }
  171. void beolvasConsol(int &N, int &K, int h[max_meret][vsz])
  172. {
  173.     N=read_int("Hany versenyzo van: ","Legalabb 2 es legfeljebb 100 legyen!\n",ketto_szaz);
  174.     bool hiba;
  175.     do{
  176.         K=read_int("Mennyi a K erteke: ","Legalabb 2 es legfeljebb 100 legyen!\n",ketto_szaz);
  177.         hiba=K>N;
  178.         if(hiba)
  179.         {
  180.             cout<<"K nem lehet nagyobb mint ahany versenyzo van! Add meg ujra!\n";
  181.         }
  182.     }while(hiba);
  183.     //Mátrix beolvasása
  184.     for(int i=0; i<N; ++i)
  185.     {
  186.         string sz;
  187.         do{
  188.             hiba=false;
  189.             cout<<"Add meg az "<<i+1<<
  190.             ". versenyzo eredmenyeit (szokozokkel elvalasztva)\n";
  191.             getline(cin,sz);
  192.             istringstream inp(sz);
  193.             for(int j=0; !hiba && j<vsz; ++j)
  194.             {
  195.                 inp>>h[i][j];
  196.                 hiba=inp.fail() || h[i][j]<0 || h[i][j]>N;
  197.             }
  198.             hiba = hiba || !inp.eof();
  199.             if(hiba){
  200.                 cerr<<"Hibas vagy tul keves/tul sok adat, add meg ujra!\n";
  201.             }
  202.         }while(hiba);
  203.     }
  204.     ///Versenyenként a helyezések megadásának ellenőrzése
  205.     ///Ha H a legnagyobb érték, akkor minden 1..H közötti érték pontosan egyszer fordul elő
  206.     ///Megoldás: HF
  207. }
  208.  
  209. void feladat_1(int N, const int h[][vsz], const int pont[], int vp[])
  210. {
  211.     for(int i = 0; i < N; ++i)
  212.     {
  213.         int s = 0;
  214.         for(int j = 0; j < vsz; ++j)
  215.         {
  216.             s += pont[h[i][j]];
  217.         }
  218.         vp[i] = s;
  219.     }
  220. }
  221.  
  222. void feladat_2(int N, const int h[][vsz], int isz[])
  223. {
  224.     for(int j = 0; j < vsz; ++j)
  225.     {
  226.         int db = 0;
  227.         for(int i = 0; i < N; ++i)
  228.         {
  229.             if(h[i][j] > 0)
  230.             {
  231.                 ++db;
  232.             }
  233.         }
  234.         isz[j] = db;
  235.     }
  236. }
  237.  
  238. int feladat_3(int N, int K, const int h[][vsz], int mv[])
  239. {
  240.     int db = 0;
  241.     for(int i = 0; i < N; ++i)
  242.     {
  243.         int j = 0;
  244.         while(j < vsz && h[i][j] > 0 && h[i][j] <= K)
  245.         {
  246.             ++j;
  247.         }
  248.         if(j == vsz)
  249.         {
  250.             mv[db++] = i;
  251.         }
  252.     }
  253.     return db;
  254. }
  255.  
  256. int feladat_4(int N, const int h[][vsz],int gy[])
  257. {
  258.     int db = 0;
  259.     for(int i = 0; i < N; ++i)
  260.     {
  261.         int j = 0;
  262.         while(j < vsz && h[i][j] != 1)
  263.         {
  264.             ++j;
  265.         }
  266.         if(j < vsz)
  267.         {
  268.             gy[db++] = i;
  269.         }
  270.     }
  271.     return db;
  272. }
  273.  
  274. int feladat_5(int N, int K, const int h[][vsz], int vp[], int kj[])
  275. {
  276.     for(int i = 0; i < N; ++i)
  277.     {
  278.         kj[i] = i+1;
  279.     }
  280.     Buborek(N,vp,kj);
  281.     #ifdef TESZT
  282.         cerr << "Rendezes utani allapot:\n"
  283.         for(int i = 0; i < N; ++i)
  284.         {
  285.             cerr << vp[i] << " " << kj[i] << endl;
  286.         }
  287.     #endif // TESZT
  288.     int db = K;
  289.     int up = vp[K-1];
  290.     while(db < N && vp[db] == up)
  291.     {
  292.         ++db;
  293.     }
  294.     return db;
  295. }
  296. void Buborek(int N, int p[], int ind[])
  297. {
  298.     for(int meddig = N-1; meddig > 0;)
  299.     {
  300.         int utolso = -1;
  301.         for(int j = 0; j < meddig; ++j)
  302.         {
  303.             if(p[j] < p[j+1])
  304.             {
  305.                 csere(p[j],p[j+1]);
  306.                 csere(ind[j],ind[j+1]);
  307.                 utolso = j;
  308.             }
  309.         }
  310.         meddig = utolso;
  311.     }
  312. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top