Website Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit5c0f52b211488afa1a53856f8e7e21b60ebb0c68 (patch)
Author
 Justsvetoslavov <justsvetoslavov@gmail.com>
2021-12-01 19:45:33 +0200
Committer
 Justsvetoslavov <justsvetoslavov@gmail.com>
2021-12-01 19:45:33 +0200
Files62afb9fc0866a3f1e7567b8ceda40596f4f81d7e
Introduction_to_programming_FMI-5c0f52b211488afa1a53856f8e7e21b60ebb0c68.tar
Introduction_to_programming_FMI-5c0f52b211488afa1a53856f8e7e21b60ebb0c68.tar.gz
Introduction_to_programming_FMI-5c0f52b211488afa1a53856f8e7e21b60ebb0c68.zip
Parente572e8c7109448bae79fc67ed0a7721a10e4684d (diff)
Add Task&Solution
2 files changed, 176 insertions, 0 deletions
-rw-r--r--pract_SI/Pract. 06/Hmw2_task4/README.md11
-rw-r--r--pract_SI/Pract. 06/Hmw2_task4/Solution.cpp165
diff --git a/pract_SI/Pract. 06/Hmw2_task4/README.md b/pract_SI/Pract. 06/Hmw2_task4/README.md
new file mode 100644
index 0000000..0c0bd82
--- /dev/null
+++ b/pract_SI/Pract. 06/Hmw2_task4/README.md
@@ -0,0 +1,11 @@
+## Задача 4 - Домашна работа №2
+#### зимен семестър 2021/2022, спец. Софтуерно инженерство
+
+Да се напише програма, която приема като вход от клавиатурата две цели числа - n и k и отпечатва в конзолата минималния брой от описаните по-долу операции, които трябва да се приложат за да се получи k от n.
+Валидните операции са:
+-Добавяне на цифра в края на числото.
+-Премахване на цифра от края на числото.
+-Размяна на местата на две цифри в числото.
+
+*Вход: 1234 43215, Изход: 3*
+*Вход: 987123 123, Изход: 6* \ No newline at end of file
diff --git a/pract_SI/Pract. 06/Hmw2_task4/Solution.cpp b/pract_SI/Pract. 06/Hmw2_task4/Solution.cpp
new file mode 100644
index 0000000..2d4fc6a
--- /dev/null
+++ b/pract_SI/Pract. 06/Hmw2_task4/Solution.cpp
@@ -0,0 +1,165 @@
+#include <iostream>
+#include <vector>
+#define TEN 10
+using namespace std;
+
+/*
+Example input/output:
+
+44987434
+544847
+O: 8
+
+129
+329
+O: 3
+
+4332321
+4232331
+O: 1
+
+987123
+123
+O: 6
+
+77688988
+89675421
+O: 10
+*/
+
+bool checkData(int&,int&);
+vector<int> createVector(int);
+void swap(int&, int&);
+int contains(const vector<int>&,const int digit,const size_t);
+int contains(const vector<int>&,const vector<int>&, const int digit,const size_t);
+unsigned leastOperations(const int n,const int k)
+{
+ vector<int> nDigits = createVector(n);
+ vector<int> kDigits = createVector(k);
+ size_t numberOfOperations = NULL;
+
+ for (size_t i = 0; i < kDigits.size(); i++)
+ {
+ while (contains(kDigits, nDigits[nDigits.size() - 1], i) == -1 && nDigits.size() > i)
+ {
+ nDigits.pop_back();
+ numberOfOperations++;
+ }
+
+ int containsDigit = contains(nDigits,kDigits, kDigits[i], i);
+ if (containsDigit == i)
+ continue;
+ else if (containsDigit != -1)
+ swap(nDigits[i], nDigits[containsDigit]);
+ else
+ {
+ nDigits.push_back(kDigits[i]);
+
+ if (i != nDigits.size() - 1)
+ {
+ swap(nDigits[i], nDigits[nDigits.size() - 1]);
+ numberOfOperations++;
+ }
+ }
+
+ numberOfOperations++;
+ }
+
+ numberOfOperations += nDigits.size() - kDigits.size();
+ return numberOfOperations;
+}
+
+int main()
+{
+ while (true)
+ {
+ int n, k;
+ cin >> n >> k;
+
+ if (checkData)
+ cout << leastOperations(n, k) << endl << endl;
+ }
+
+}
+
+bool checkData(int &n,int &k)
+{
+ if (n < NULL && k < NULL)
+ {
+ n *= -1;
+ k *= -1;
+ }
+
+ return(n >= NULL && k >= NULL);
+}
+
+vector<int> createVector(int number)
+{
+ vector<int> newVector;
+
+ size_t powTen = 1;
+ while (powTen * TEN <= number)
+ powTen *= TEN;
+
+ while (powTen > 0)
+ {
+ int digit = number / powTen;
+ newVector.push_back(digit);
+ number %= powTen;
+ powTen /= TEN;
+ }
+
+ return newVector;
+}
+
+void swap(int& f, int& s)
+{
+ int temp = f;
+ f = s;
+ s = temp;
+}
+
+int contains(const vector<int> &v, int digit, size_t start)
+{
+ for (size_t i = start; i < v.size(); i++)
+ if (v[i] == digit)
+ return i; //return index
+
+ return -1;
+}
+
+int contains(const vector<int> &nDigits,const vector<int> &kDigits, int digit, size_t start)
+{
+ int index = -1;
+ bool firstOccurance = true;
+ bool conflict;
+ for (size_t i = start; i < nDigits.size(); i++)
+ {
+ conflict = false;
+ if (kDigits.size() > i)
+ {
+ if (nDigits[i] == kDigits[i] && nDigits[i] == digit)
+ {
+ conflict = true;
+
+ if (firstOccurance)
+ {
+ if (start == i)
+ return index = i;
+
+ index = i;
+ firstOccurance = false;
+ }
+ }
+ }
+
+ if (nDigits[i] == digit && !conflict)
+ {
+ return index = i;
+ firstOccurance = false;
+ }
+ }
+
+ return index;
+}
+