From 2af7aac08e3bae3ed6e99fe04c32d39acb4bb129 Mon Sep 17 00:00:00 2001 From: Angel Dimitriev Date: Tue, 2 Nov 2021 14:34:38 +0200 Subject: Add files via upload --- Sem. 04/example02-08.cpp | 141 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 Sem. 04/example02-08.cpp (limited to 'Sem. 04/example02-08.cpp') diff --git a/Sem. 04/example02-08.cpp b/Sem. 04/example02-08.cpp new file mode 100644 index 0000000..002a8ab --- /dev/null +++ b/Sem. 04/example02-08.cpp @@ -0,0 +1,141 @@ +#include +using namespace std; + + +//задача 2: +// Напишете функция, която приема цяло число и връща обърнатото му. +// 1234 - 4321 + +int reverse(unsigned int n) +{ + unsigned int result = 0; + + while (n != 0) + { + int lastDigit = n % 10; + (result *= 10) += lastDigit; + n /= 10; + } + + return result; +} + +//задача 3: Напишете функция, която приема цяло число и връща дали е палиндром + +//12321 -> true +//123 -> false; + +bool isPalindrome(unsigned int n) +{ + return n == reverse(n); +} +//задача 4: Напишете функция, която приема две цели числа - n и k. +//Функцията да връща дали k е суфикс на n. +// n = 1234 k = 34 true +// n = 1234 k = 234 true +// n = 1234 k = 1234 true +// n = 1234 k = 23 false + +bool isSuffix(unsigned int n, unsigned int k) +{ + if (k == 0 && (n % 10 != 0)) + return false; + + while (k != 0) + { + int lastDigitOfN = n % 10; + int lastDigitOfK = k % 10; + + if (lastDigitOfN != lastDigitOfK) + return false; + + n /= 10; + k /= 10; + } + + return true; +} + + +// задача 5: Напишете функция, която приема две цели числа -n и k. +// Функцията да връща дали k е префикс на n. + +// n = 1234, k = 12 true +// n = 1234, k = 23 false; + +// u е префикс на w <-> u ^rev е суфикс на w^rev +bool isPrefix(unsigned int n, unsigned int k) +{ + return isSuffix(reverse(n), reverse(k)); +} + +// задача 6: Напишете функция, която приема две числа - n,k. +// Функцията връща дали k е инфикс на n. + +bool isInfix(unsigned int n, unsigned int k) +{ + if (n == 0 && k == 0) + return true; + + while (n > 0) + { + if (isSuffix(n, k)) + return true; + n /= 10; + } + return false; +} + + +//задача. +//Да се напише функция, която приема цяло число и връща дали цифрите му са сортирани. + +// 1234 true +// 12379 true +// 1231 false +// 4321 true +// 4325 false +// 1111 true + +bool areDigitsSortedAscending(unsigned int n) +{ + while (n >= 10) + { + int lastDigit = n % 10; + int prevLastDigit = (n / 10) % 10; + + if (prevLastDigit > lastDigit) + return false; + + n /= 10; + } + + return true; +} + +bool areDigitsSortedDescending(int n) +{ + return areDigitsSortedAscending(reverse(n)); +} + +bool areDigitsSorted(int n) +{ + return areDigitsSortedDescending(n) || areDigitsSortedAscending(n); +} + +//задача. +// Напишете функция, която приема цяло число и връща дали се съдържа само от еднакви цифри. + +//Вход: 11111 Изход:true +//Вход: 123 Изход: false + +bool containOnlyOneDigit(int n) +{ + return areDigitsSortedDescending(n) && areDigitsSortedAscending(n); +} + + +int main() +{ + cout << containOnlyOneDigit(444) << endl; +} \ No newline at end of file -- cgit v1.3.1-23-gd82d