diff --git a/Week 03/task1.cpp b/Week 03/task1.cpp new file mode 100644 index 0000000..67879d9 --- /dev/null +++ b/Week 03/task1.cpp @@ -0,0 +1,16 @@ +#include + +int main() +{ + int n, m; + std::cin >> n >> m; + if (n > m || n > 256) + { + std::cout << "num are not in the correct interva "; + return 1; + } + for (char num = n; num < m; num++) + { + std::cout << num << '\n'; + } +} \ No newline at end of file diff --git a/Week 03/task2.cpp b/Week 03/task2.cpp new file mode 100644 index 0000000..3980a37 --- /dev/null +++ b/Week 03/task2.cpp @@ -0,0 +1,14 @@ +#include + +int main() +{ + int n; + std::cin >> n; + int factoriel = 1, i = 1; + while (i <= n) + { + factoriel = i * factoriel; + i++; + } + std::cout << factoriel; +} \ No newline at end of file diff --git a/Week 03/task3.cpp b/Week 03/task3.cpp new file mode 100644 index 0000000..ab71997 --- /dev/null +++ b/Week 03/task3.cpp @@ -0,0 +1,16 @@ +#include + +int main() +{ + int n; + std::cin >> n; + int sum = 0; + for (int a = 1; a <= n; a++) + { + for (int b = 1; b <= a; b++) + { + sum += b; + } + } + std::cout << sum; +} \ No newline at end of file diff --git a/Week 03/task4.cpp b/Week 03/task4.cpp new file mode 100644 index 0000000..6010af6 --- /dev/null +++ b/Week 03/task4.cpp @@ -0,0 +1,14 @@ +#include + +int main() +{ + int n; + std::cin >> n; + for (int i = 1; i <= n; i++) + { + if (n % i == 0) + { + std::cout << i << '\n'; + } + } +} \ No newline at end of file diff --git a/Week 03/task5.cpp b/Week 03/task5.cpp new file mode 100644 index 0000000..e37ac9f --- /dev/null +++ b/Week 03/task5.cpp @@ -0,0 +1,17 @@ +#include + +int main() +{ + int n; + std::cin >> n; + int morePreviousNum = 0, previousNum = 1; + int currentNum; + + for (int i = 0; i < 10; i++) + { + currentNum = morePreviousNum + previousNum; + std::cout << currentNum << " "; + morePreviousNum = previousNum; + previousNum = currentNum; + } +} \ No newline at end of file diff --git a/Week 03/task6.cpp b/Week 03/task6.cpp new file mode 100644 index 0000000..2e7a241 --- /dev/null +++ b/Week 03/task6.cpp @@ -0,0 +1,23 @@ +#include + +int main() +{ + int n; + std::cin >> n; + + int sum = 0; + while (true) + { + int num; + std::cin >> num; + if (num == -1) { + break; + } + if (num < n && num % 2 == 0) + { + sum += num; + } + } + std::cout << sum; +} +} \ No newline at end of file diff --git a/Week 03/task7.cpp b/Week 03/task7.cpp new file mode 100644 index 0000000..5a809b7 --- /dev/null +++ b/Week 03/task7.cpp @@ -0,0 +1,23 @@ +#include + +int main() +{ + int start, end; + std::cin >> start >> end; + int sum = 0; + for(int i = start; i <= end; i++) + { + for(int t = 1; t < i; t++) + { + if (i % t == 0) + { + sum += t; + } + } + if (i == sum) + { + std::cout << i << std::endl; + } + sum = 0; + } +} \ No newline at end of file diff --git a/Week 03/task8.cpp b/Week 03/task8.cpp new file mode 100644 index 0000000..b3dcc2d --- /dev/null +++ b/Week 03/task8.cpp @@ -0,0 +1,15 @@ +#include + +int main() +{ + int n, m; + std::cin >> n >> m; + for (int i = 0; i <= n; i++) + { + for (int j = 0; j <= m; j++) + { + std::cout << "(" << i << "," << j << ")"; + } + std::cout << endl; + } +} \ No newline at end of file diff --git a/Week 04/Week04.cpp b/Week 04/Week04.cpp new file mode 100644 index 0000000..209d8a8 --- /dev/null +++ b/Week 04/Week04.cpp @@ -0,0 +1,109 @@ +#include + +int pow(int num, int power) +{ + if (power == 0) + return 1; + for (int i = num; power > 1; power--) + num *= i; + return num; +} + +//5. Създайте програма, която чете цяло положително число K и интервал [N, M]. +// Да се изведат всички специални числа в интервала спрямо въведеното K. Специално число +// е такова чисо, за което K се дели без остатък на всяка негова цифра. (Примерно 2418 е +// специално спрямо K = 16, защото 16 се дели на 2, 4, 1 и 8). +bool isSpecial(unsigned start, unsigned end) +{ + while (start > 0) + { + int digit = start % 10; + if (digit == 0 || end % digit != 0) + { + return false; + } + return true; + } +} + +//4. Да се напише програма, която приема естествено число и го отпечатва наобратно: +//(ако има водещи нули да се пропуснат) + +unsigned int reverse(unsigned int num) +{ + unsigned int reversednum = 0; + while (num > 0) + { + reversednum = reversednum * 10 + num % 10; + num /= 10; //премахва последната цифра// + } + return reversednum; +} + +// 1. Да се прочете от конзолата естествено число и да се изведе дали е просто. +bool isPrime(int num) +{ + for (int i = 2; i * i < num; i += 1) + { + if (num % i != 0) + { + return true; + } + } + return false; +} + +//2. Да се прочетат от конзолата естествено число(unsigned int / unsigned) +// и цифра и да се изведе колко пъти цифрата се среща в даденото число. +unsigned int numsOfDigit2(int n, int t) +{ + int sum = 0; + while (n > 0) + { + if (n % 10 == t) + { + sum++; + } + n /= 10; + } + return sum; +} + +//3. Да се напише програма, която приема естествено число и отпечатва ново число, +//съставено от сортираните му във възходящ ред цифри. (ако съдържа нули да се пропуснат) +unsigned int sortNum(unsigned int num) +{ + int countnum = 0; + unsigned int res = 0; + + for (unsigned int i = num; i > 0; i /= 10) + { + countnum++; + } + + for (int i = 1; i <= 9; i++) + { + int digitcount = 0; + unsigned int numCopy = num; + + for (unsigned int digit; numCopy != 0; numCopy /= 10) + { + digit = numCopy % 10; + if (digit == i) + digitcount++; + } + + for (int j = 0; j < digitcount; j++) + { + countnum--; + res += i * pow(10, countnum); + } + } + + return res; +} + +int main() +{ + +} \ No newline at end of file diff --git a/Week 05/Week05.cpp b/Week 05/Week05.cpp new file mode 100644 index 0000000..470849e --- /dev/null +++ b/Week 05/Week05.cpp @@ -0,0 +1,256 @@ +// Week05.cpp : This file contains the 'main' function. Program execution begins and ends there. +// + +#include + +//1: Да се напише функция swap, която приема две числa и разменя +// стойностите им. Създайте overload-и на тази функция, така че тя да +// работи за int, double (добавете и още типове, ако желаете). + +void swap(int& x, int& y) +{ + int temp = x; + x = y; + y = temp; +} + +//7 nod +int gcd(int a, int b) +{ + if (a < b) swap(a, b); + + while (b != 0) { + int mod = a % b; + a = b; + b = mod; + } + + return a; +} + +//8 nok +int lcm(int a, int b) +{ + return (a / gcd(a, b)) * b; +} + + +//2: Създайте фунция, която приема 2 цели числа - числител и знаменател, и +// съкращава дробта. +//Бонус: Напишете програма, която извежда сбора на 2 такива дробни числа. +void reduce(int& a, int& b) { + int _gcd = gcd(a, b); + a /= _gcd; + b /= _gcd; +} + +void sumOfFractions(int a, int b, int c, int d) { + int denominator = lcm(b, d); + int numerator = a * (denominator / b) + c * (denominator / d); + reduce(numerator, denominator); + std::cout << numerator << "/" << denominator; +} + +// 3: Да се напише функция, която приема число n и индекс на цифра k и премахва k-тата +// цифра на n. + +/*int removedigit(int& a, int& pow) +{ + //12345 3 --> 1245 + pow = 1; + for (int i = 0; i < a; i++) + { + pow *= 10; + } + a /= 10; + a = a * pow + a % (pow); + return a; +}*/ + +//4 Да се напише функция, която приема число и го разделя на две числа, съставени +// съответно от цифрите му на четна позиция и цифрите му на нечетна. + +void PrimenotprimeDigits(int x, int evendig, int odddig) +{ + evendig = 0; + odddig = 0; + int position = 1; + while (x > 0) + { + int digit = x % 10; + x /= 10; + if (position % 2 == 0) + { + evendig = evendig * 10 + digit; + } + else + { + odddig = odddig * 10 + digit; + } + position++; + } + int reverseeven = 0, reverseodd = 0; + while (evendig > 0) + { + reverseeven = reverseeven * 10 + evendig % 10; + evendig /= 10; + } + while (odddig > 0) + { + reverseodd = reverseodd * 10 + odddig % 10; + odddig /= 10; + } + evendig = reverseeven; + odddig = reverseodd; +} + + //5 Да се напише функция, която приема число n и индекси на цифри в него - i и j (i <= j). + // Програмата да променя n така, че накрая да е съставено само от цифрите от i-та до j-та + // позиция включително. + + int digfromitoj(int num, int i, int j) + { + int newnum = 0; + int position = 1; + while (num > 0) + { + int digit = num % 10; + num /= 10; + if (position >= i && position <= j) + { + newnum = newnum * 10 + digit; + } + position++; + } + + int reversenewnum = 0; + while (newnum > 0) + { + reversenewnum = reversenewnum * 10 + newnum % 10; + newnum /= 10; + } + return reversenewnum; + } + + int getNumLength(int num) + { + int numDigits = 0; + for (int temp = num; temp > 0; temp /= 10) + numDigits++; + return numDigits; + } + + //6 Да се напише функция, която по дадени 3 числа - n, m, k разменя k-тите цифри на m и n. + void swapKDigit(int& m, int& n, int k) + { + int cntM = getNumLength(m), cntN = getNumLength(n); + + if (k > cntM || k > cntN || k < 1) { + std::cout << "Invalid digit position." << std::endl; + return; + } + + int mPower = 1, nPower = 1; + for (int i = 0; i < cntM - k; i++) mPower *= 10; + for (int i = 0; i < cntN - k; i++) nPower *= 10; + + int mKDigit = (m / mPower) % 10; + int nKDigit = (n / nPower) % 10; + + m = m - mKDigit * mPower + nKDigit * mPower; + n = n - nKDigit * nPower + mKDigit * nPower; + } + + + int reverse(int number) { + int reversed = 0; + + while (number != 0) { + (reversed *= 10) += number % 10; + number /= 10; + } + + return reversed; + } + + int pow(int number, int power) { + if (power == 0) return 1; + + for (int i = number; power > 1; power--) + number *= i; + return number; + } + + //9 + unsigned concat(unsigned first, unsigned second) { + int secondDigitsCount = getNumLength(second); + + return first * pow(10, secondDigitsCount) + second; + } + +int main() +{ + //1 + /*int a = 5; int b = 7; + std::cout << a << b << std::endl; // 5 7 + swap(a, b); + std::cout << a << b << std::endl; // 7 5 */ + // + + //2 + /*int a, b; + std::cin >> a >> b; + reduce(a, b); + std::cout << a << "/" << b;*/ + + //2 bonus + /*int a, b, c ,d; + std::cin >> a >> b >> c >> d; + sumOfFractions(a, b, c, d);*/ + + //3 + /*int a; int pow; + std::cin >> a >> pow; + removedigit(a, pow); + std::cout << a << pow;*/ + + //4 + /*int x; + std::cin >> x; + int evendig, odddig; + PrimenotprimeDigits(x, evendig, odddig); + std::cout << evendig << ' ' << odddig << ' '; + return 0;*/ + + //5 + /*int num, i, j; + std::cin >> num >> i >> j; + int NEWnum = digfromitoj(num, i, j); + std::cout << NEWnum;*/ + + //6 + /*int m, n, k; + std::cin >> m >> n >> k; + swapKDigit(m, n, k); + std::cout << m << " " << n;*/ + + //7 + /*int a, b; + std::cin >> a >> b; + int nod = gcd(a, b); + std::cout << nod;*/ + + //8 + /*int a, b; + std::cin >> a >> b; + int nok = gcd(a, b); + std::cout << nok;*/ + + //9 + int a, b; + std::cin >> a >> b; + std::cout << concat(a, b); +} + + +