Advertisement
annie_02

UP_d2_zad4_2021godina

Dec 5th, 2022
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.00 KB | None | 0 0
  1. /**
  2. *
  3. * Solution to homework assignment 2
  4. * Introduction to programming course
  5. * Faculty of Mathematics and Informatics of Sofia University
  6. * Winter semester 2021/2022
  7. *
  8. * @author Kaloyan Kateliev
  9. * @idnumber 8MI0600049
  10. * @task 4
  11. * @compiler VC
  12. *
  13. */
  14. #include <iostream>
  15. #include <vector>
  16.  
  17. using namespace std;
  18.  
  19. int getVectorElement(vector<int> vector, int index) {
  20.     if (index < vector.size()) {
  21.         return vector[index];
  22.     }
  23.     return -1;
  24. }
  25.  
  26. void fillVector(vector<int> &numArray, int number) {
  27.     while (number > 0) {
  28.         int tempNumber = number % 10;
  29.         numArray.insert(numArray.begin(),tempNumber);
  30.         number /= 10;
  31.     }
  32. }
  33.  
  34. int indexOf(vector<int> numArray, int number) {
  35.     int result = -1;
  36.     for (int i = 0; i < numArray.size(); i++) {
  37.         if (numArray[i] == number) {
  38.             return i;
  39.         }
  40.     }
  41.  
  42.     return -1;
  43. }
  44.  
  45. int countMatchingNumbers(vector<int>& numberArray, int number) {
  46.     int counter = 0;
  47.     for (int i = 0; i < numberArray.size(); i++) {
  48.         if (numberArray[i] == number) {
  49.             counter++;
  50.         }
  51.     }
  52.     return counter;
  53. }
  54.  
  55. int checkForNoMatchingNumbers(vector<int>& numberAArray, vector<int> numberBArray) {
  56.     int lastElement = getVectorElement(numberAArray, numberAArray.size() - 1);
  57.     int numberDoesntExsist = indexOf(numberBArray, lastElement);
  58.     if (numberDoesntExsist == -1) {
  59.         return numberDoesntExsist;
  60.     }
  61.     else {
  62.         int counterA = countMatchingNumbers(numberAArray, lastElement);
  63.         int counterB = countMatchingNumbers(numberBArray, lastElement);
  64.         if (counterA > counterB) {
  65.             return -1;
  66.         }
  67.         return 0;
  68.     }
  69. }
  70.  
  71. int removeLastElementIfNoMatch(vector<int> &numberAArray, vector<int> numberBArray, int moves) {
  72.     while (numberAArray.size() && checkForNoMatchingNumbers(numberAArray, numberBArray) == -1) {
  73.         moves++;
  74.         numberAArray.pop_back();
  75.     }
  76.     return moves;
  77. }
  78.  
  79. int findIndex(vector<int>& numberAArray, vector<int> numberBArray, int currentNumber, int startPosition) {
  80.     for (int i = startPosition; i < numberAArray.size(); i++) {
  81.         if (getVectorElement(numberAArray, i) == currentNumber) {
  82.             if (getVectorElement(numberBArray, i) != getVectorElement(numberAArray, i)) {
  83.                 return i;
  84.             }
  85.         }
  86.     }
  87.     return -1;
  88. }
  89.  
  90. void swapPositions(vector<int>& numberAArray, int foundIndex, int currentIndex) {
  91.     int currentValue = numberAArray[currentIndex];
  92.     numberAArray[currentIndex] = numberAArray[foundIndex];
  93.     numberAArray[foundIndex] = currentValue;
  94. }
  95.  
  96. int countAddNumbersMoves(vector<int>& numberAArray, vector<int>& numberBArray, int currentNumber, int currentIndex, int moves) {
  97.     numberAArray.push_back(currentNumber);
  98.     moves++;
  99.     if (numberBArray.size() < currentIndex && numberAArray[currentIndex] != numberBArray[currentIndex]) {
  100.         swapPositions(numberAArray, numberAArray.size() - 1, currentIndex);
  101.         moves++;
  102.     }
  103.     return moves;
  104. }
  105.  
  106. int main() {
  107.     vector<int> numberAArray;
  108.     vector<int> numberBArray;
  109.  
  110.     int moves = 0;
  111.     int numberA, numberB;
  112.     cin >> numberA >> numberB;
  113.  
  114.     fillVector(numberAArray, numberA);
  115.     fillVector(numberBArray, numberB);
  116.  
  117.     for (int i = 0; i < numberBArray.size(); i++) {
  118.         int currentElement = numberBArray[i];
  119.         moves = removeLastElementIfNoMatch(numberAArray, numberBArray, moves);
  120.         while (getVectorElement(numberBArray, i) != getVectorElement(numberAArray, i)) {
  121.             int foundIndex = findIndex(numberAArray, numberBArray, currentElement, i);
  122.             if (foundIndex > -1) {
  123.                 moves ++;
  124.                 swapPositions(numberAArray, foundIndex, i);
  125.             }
  126.             else {
  127.                 moves = countAddNumbersMoves(numberAArray, numberBArray, currentElement, i, moves);
  128.             }
  129.             moves = removeLastElementIfNoMatch(numberAArray, numberBArray, moves);
  130.         }
  131.     }
  132.  
  133.     cout << moves;
  134.     return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement