Advertisement
Old_But_Gold

Exam KPO

Jan 7th, 2024 (edited)
402
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.82 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. char* lineRead() {
  6. char* str = (char*) malloc(sizeof(char));
  7. char ch;
  8. int i = 0;
  9. while(ch = getc(stdin), ch != '\n') {
  10. str[i] = ch;
  11. i++;
  12. str = (char*) realloc(str, (i + 1) * sizeof(char));
  13. }
  14. str[i] = '\0';
  15. return str[0] == '\0' ? NULL : str;
  16. }
  17.  
  18. int GCD(int a, int b) {
  19. return b == 0 ? a : GCD(b, a % b);
  20. }
  21.  
  22. int Task12() {
  23. int num1, num2;
  24. scanf("%d %d", &num1, &num2);
  25. int result = GCD(num1, num2);
  26. printf("%d\n", result);
  27. return result;
  28. }
  29.  
  30. int IsPowerOfTwo(int number) {
  31. return (number & number - 1) == 0 ? 1 : 0;
  32. }
  33.  
  34. void Task21() {
  35. int number;
  36. scanf("%d", &number);
  37. printf(IsPowerOfTwo(number) ? "Power of 2\n" : "Not a power of 2\n");
  38. }
  39.  
  40. int Task22() {
  41. char* str = lineRead();
  42. int count = 0;
  43. for (int i = 0; str[i]; i++)
  44. count += (str[i] >= 'A' && str[i] <= 'Z');
  45. printf("%d\n", count);
  46. return count;
  47. }
  48.  
  49. void Task6() {
  50. int len;
  51. scanf("%d", &len);
  52. if (len < 2) return;
  53. int* arr = (int *) malloc(sizeof(int) * len);
  54. if (arr == NULL) return;
  55. for (int i = 0; i < len; i++)
  56. scanf("%d", &arr[i]);
  57. int num1, num2;
  58.  
  59. if (arr[0] < arr[1]) {
  60. num1 = arr[0];
  61. num2 = arr[1];
  62. } else {
  63. num1 = arr[1];
  64. num2 = arr[0];
  65. }
  66.  
  67. for (int i = 2; i < len; i++) {
  68. if (arr[i] < num1) {
  69. num2 = num1;
  70. num1 = arr[i];
  71. } else if (arr[i] < num2) {
  72. num2 = arr[i];
  73. }
  74. }
  75.  
  76. printf("2 min: %d and %d\n", num1, num2);
  77. free(arr);
  78. }
  79.  
  80. void Task5() {
  81. int number;
  82. scanf("%d", &number);
  83. for (int i = 1; i <= number; i++) {
  84. printf("2^%d = %d\n", i, 1 << i);
  85. }
  86. }
  87.  
  88. void Task1() {
  89. printf("Введите строку: ");
  90. char* str = lineRead();
  91. printf("Введите число: ");
  92. int num1;
  93. scanf("%d", &num1);
  94. int temp = num1;
  95. int numLen = 0;
  96. while (temp > 0) {
  97. numLen++;
  98. temp /= 10;
  99. }
  100. char *num = (char *) malloc((len_num + 1) * sizeof(char));
  101. sprintf(num, "%d", num1);
  102. num[len_num] = '\0';
  103. int count = 0;
  104. int index = 0;
  105.  
  106. for (int i = 0; str[i]; i++)
  107. {
  108. if (str[i] == num[index++]) {
  109. if (index == numLen) {
  110. count++;
  111. index = 0;
  112. }
  113. } else {
  114. index = 0;
  115. }
  116. }
  117. printf("Общее число вхождений: %d\n", count);
  118. free(str);
  119. }
  120.  
  121. void Task3() {
  122. int N;
  123. int K;
  124. scanf("%d %d", &N, &K);
  125. if (K < N) {
  126. int* arr = (int*) malloc(sizeof(int) * N);
  127. for (int i = 0; i < N; i++)
  128. scanf("%d", &arr[i]);
  129. for (int i = K; i < N - 1; i++)
  130. arr[i] = arr[i] + 1;
  131. arr = (int*) realloc(arr, (N - 1) * sizeof(int));
  132. for (int i = 0; i < N - 1; i++)
  133. printf("%7d", arr[i]);
  134. printf("\n");
  135. }
  136. }
  137.  
  138. void Task8() {
  139. char* str = lineRead();
  140. char symbol;
  141. scanf("%c", &symbol);
  142. int count = 0;
  143. int len = 0;
  144. for (int i = 0; str[i]; i++) {
  145. count += symbol == str[i];
  146. len++;
  147. }
  148.  
  149. double percentage = (double) count / len;
  150. percentage *= 100;
  151. printf("%.2f%%", percentage);
  152.  
  153. }
  154.  
  155. void Task14() {
  156. char* str = lineRead();
  157. int isTrue = 1;
  158. for (int i = 0; str[i]; i++)
  159. isTrue &= (str[i] <= '9' && str[i] >= '0') || str[i] == ' ' || str[i] == '+' || str[i] == '-' || str[i] == ':' || str[i] == '*';
  160. printf((isTrue ? "True" : "False"));
  161. }
  162.  
  163. void Task17() {
  164. char* str = lineRead();
  165. char symbol;
  166. scanf("%c", &symbol);
  167. int len = 0;
  168. for (int i = 0; str[i]; i++)
  169. len++;
  170. for (int i = 0; str[i]; i++)
  171. if (str[i] == symbol) {
  172. for (int j = i; j < len - 1; j++)
  173. str[j] = str[j + 1];
  174. str[len - 1] = '\0';
  175. len--;
  176. str = (char*) realloc(str, sizeof(char) * len);
  177. }
  178.  
  179. printf("%s", str);
  180. }
  181.  
  182. void Task4() {
  183. char* str = lineRead();
  184. char* newStr = (char*) malloc(sizeof(char));
  185. int index = 0;
  186. for (int i = 0; str[i]; i++) {
  187. int isTrue = 1;
  188. int j = i;
  189. while (str[j] != ' ' && str[j + 1] != '\0') {
  190. isTrue &= str[j] >= '0' && str[j] <= '9';
  191. j++;
  192. }
  193. if (str[j + 1] == '\0')
  194. isTrue &= str[j] >= '0' && str[j] <= '9';
  195.  
  196. if (isTrue) {
  197. newStr = (char*) realloc(newStr, sizeof(char) * j - i + index + 1);
  198. for (int k = i; k <= j; k++)
  199. newStr[index++] = str[k];
  200. if (str[j + 1] != '\0')
  201. newStr[index - 1] = ',';
  202. }
  203. i = j;
  204. }
  205. newStr[(newStr[index - 1] == ',' ? index - 1 : index)] = '\0';
  206. printf("%s\n", newStr);
  207. free(str);
  208. }
  209.  
  210. void Task15() {
  211. int N;
  212. int K;
  213. scanf("%d %d", &N, &K);
  214. int** matrix = (int**) malloc(sizeof(int*) * N);
  215. for (int i = 0; i < N; i++)
  216. matrix[i] = (int*) malloc(sizeof(int) * K);
  217. for (int i = 0; i < N; i++)
  218. for (int j = 0; j < K; j++)
  219. scanf("%d", &matrix[i][j]);
  220. int sum = 0;
  221. for (int i = 0; i < N; i++)
  222. sum += matrix[i][0];
  223. int index = 0;
  224. for (int j = 1; j < K; j++) {
  225. int tempSum = 0;
  226. for (int i = 0; i < N; i++)
  227. tempSum += matrix[i][j];
  228. if (sum < tempSum) {
  229. sum = tempSum;
  230. index = j;
  231. }
  232. }
  233. printf("%d\n", index);
  234. }
  235.  
  236. void Task18() {
  237. int N;
  238. int K;
  239. scanf("%d %d", &N, &K);
  240. int** matrix = (int**) malloc(sizeof(int*) * N);
  241. for (int i = 0; i < N; i++)
  242. matrix[i] = (int*) malloc(sizeof(int) * K);
  243. for (int i = 0; i < N; i++)
  244. for (int j = 0; j < K; j++)
  245. scanf("%d", &matrix[i][j]);
  246. int sum = 0;
  247. for (int i = 0; i < N; i++)
  248. sum += matrix[0][i];
  249. int index = 0;
  250. for (int i = 1; i < N; i++) {
  251. int tempSum = 0;
  252. for (int j = 0; j < K; j++)
  253. tempSum += matrix[i][j];
  254. if (tempSum < sum) {
  255. sum = tempSum;
  256. index = i;
  257. }
  258. }
  259. printf("%d\n", index);
  260. }
  261.  
  262. void Task19() {
  263. char* str = lineRead();
  264. char symbol;
  265. scanf("%c", &symbol);
  266. int count = 0;
  267. for (int i = 0; str[i]; i++) {
  268. if (str[i] == symbol) {
  269. while (str[i] != ' ' && str[i + 1] != '\0')
  270. i++;
  271. count++;
  272. }
  273. }
  274. printf("%d\n", count);
  275. }
  276.  
  277. void Task20() {
  278. int N;
  279. scanf("%d", &N);
  280. int* arr = (int*) malloc(sizeof(int) * N);
  281. for (int i = 0; i < N; i++)
  282. scanf("%d", &arr[i]);
  283. int num = 0x7FFFFFFF;
  284. int isExisting = 0;
  285. for (int i = 0; i < N; i++)
  286. if (arr[i] % 2 == 0 && arr[i] < num) {
  287. num = arr[i];
  288. isExisting = 1;
  289. }
  290. !isExisting ? printf("no") : printf("%d\n", num);
  291. }
  292.  
  293. void Task2() {
  294. int N;
  295. scanf("%d", &N);
  296. int* arr = (int*) malloc(sizeof(int) * N);
  297. int* newArr = (int*) malloc(sizeof(int) * N);
  298. for (int i = 0; i < N; i++)
  299. scanf("%d", &arr[i]);
  300. int index = 0;
  301. for (int i = 0; i < N; i++)
  302. if (arr[i] % 2 == 1)
  303. newArr[index++] = arr[i];
  304. for (int i = N - 1; i > -1; i--)
  305. if (arr[i] % 2 == 0)
  306. newArr[index++] = arr[i];
  307. for (int i = 0; i < N; i++)
  308. printf("%d ", newArr[i]);
  309. printf("\n");
  310. }
  311.  
  312. void Task10() {
  313. char* str = lineRead();
  314. char symbol;
  315. scanf("%c", &symbol);
  316.  
  317. char* newStr = (char*) malloc(sizeof(char));
  318. int index = 0;
  319.  
  320. for (int i = 0; str[i]; i++)
  321. if (str[i] == symbol) {
  322. printf("%d ", i);
  323. } else {
  324. newStr[index] = str[i];
  325. index++;
  326. newStr = (char*) realloc(newStr, (index + 1) * sizeof(char));
  327. }
  328. newStr[index] = '\0';
  329. printf("\n");
  330. printf("%s\n", newStr);
  331. }
  332.  
  333. void Task11() {
  334. int num;
  335. scanf("%d", &num);
  336. int base;
  337. scanf("%d", &base);
  338. int *result = (int *) malloc(sizeof(int));
  339. int index = 0;
  340.  
  341. while (num > 0) {
  342. result[index++] = num % base;
  343. num /= base;
  344. result = (int *) realloc(result, sizeof(int) * (index + 1));
  345. }
  346.  
  347. for (int i = index - 1; i > -1; i--)
  348. result[i] < 10 ? printf("%d", result[i]) : printf("%c", 'A' + result[i] - 10);
  349. printf("\n");
  350.  
  351. }
  352.  
  353. void Task16() {
  354. int num;
  355. scanf("%d", &num);
  356. int base;
  357. scanf("%d", &base);
  358. if (base < 10 && base > 1) {
  359. int *result = (int *) malloc(sizeof(int));
  360. int index = 0;
  361.  
  362. while (num > 0) {
  363. result[index++] = num % base;
  364. num /= base;
  365. result = (int *) realloc(result, sizeof(int) * (index + 1));
  366. }
  367.  
  368. for (int i = index - 1; i > -1; i--)
  369. printf("%d", result[i]);
  370. printf("\n");
  371. }
  372. };
  373.  
  374. void Task13() {
  375.  
  376. }
  377.  
  378. int main() {
  379. SetConsoleCP(CP_UTF8);
  380. SetConsoleOutputCP(CP_UTF8);
  381. int choice;
  382. int loop = 1;
  383. while (loop) {
  384. scanf("%d", &choice);
  385. fflush(stdin);
  386. switch (choice) {
  387. case 0:
  388. loop = 0;
  389. break;
  390. case 1:
  391. //Найти в строке, содержащей слова и числа, разделенные пробелами, количество вхождений числа N
  392. Task1();
  393. break;
  394. case 2:
  395. //есть массив 987654321. Сделать 975312468
  396. Task2();
  397. break;
  398. case 3:
  399. //Ввод чисел N и K, K < N. Создать массив из N элементов и удалить из массива K-й элемент.
  400. Task3();
  401. break;
  402. case 4:
  403. //Дана строка, состоящая из идентификаторов и чисел, разделенных пробелами. Необходимо сформировать новую строку, состоящую из чисел, разделенных запятыми.
  404. Task4();
  405. break;
  406. case 5:
  407. //Дано число, вывести степени двойки от первой до N-ой
  408. Task5();
  409. break;
  410. case 6:
  411. //За один проход найти два минимальных числа
  412. Task6();
  413. break;
  414. case 7:
  415. //Ввод чисел N и K, K < N. Создать массив из N элементов и удалить из массива K-й элемент.
  416. Task3();
  417. break;
  418. case 8:
  419. //Найти процентное соотношение в строке символа.
  420. Task8();
  421. break;
  422. case 9:
  423. //Удалить из массива K-й элемент
  424. Task3();
  425. break;
  426. case 10:
  427. //Найти все вхождения символа в строку и сформировать новую без данного символа.
  428. Task10();
  429. break;
  430. case 11:
  431. //Перевод в n-ую СС из 10-тичной
  432. Task11();
  433. break;
  434. //НОД методом Эвклида
  435. case 12:
  436. Task12();
  437. break;
  438. case 13:
  439. //В строке S могут быть комментарии. Удалить их
  440. Task13();
  441. break;
  442. case 14:
  443. //Проверить, является ли строка математическим выражением
  444. Task14();
  445. break;
  446. case 15:
  447. //найти индекс столбца, в котором сумма elements max
  448. Task15();
  449. break;
  450. case 16:
  451. //Дано два положительных целочисленных значения A и D. Вывести число A в СС (2 <= D <= 9), при этом нельзя, чтобы вначале были нули.
  452. Task16();
  453. break;
  454. case 17:
  455. //Дана строка S. Удалить все символы C из строки S.
  456. Task17();
  457. break;
  458. case 18:
  459. //найти индекс строки, в которых сумма elements min
  460. Task18();
  461. break;
  462. case 19:
  463. //Дана строка S и символ C. Слова в строке разделены одним пробелом. Найти количество слов с символов C.
  464. Task19();
  465. break;
  466. case 20:
  467. //Дано N и массив целых чисел размерности N, найти минимальный четный элемент, если их нет, вывести "no"
  468. Task20();
  469. break;
  470. case 21:
  471. //определить, является ли введенное с клавиатуры число степенью двойки
  472. Task21();
  473. break;
  474. case 22:
  475. //Подсчитать количество латинских букв в строке
  476. Task22();
  477. break;
  478. }
  479. }
  480. return 0;
  481. }
  482.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement