Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.20 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement