Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 3.1 Գրել ծրագիր, որը մուտքում կստանա բառ (ոչ ավել քան 20 սիմվոլ), և կարտածի մուտքագրված սիմվոլների քանակը։ (դաս 9)
- #include <iostream>
- #include <string>
- int main() {
- std::string name;
- std::cin >> name;
- int count = 0;
- for (int i = 0; i < name.size(); i++)
- {
- count++;
- }
- std::cout << count;
- }
- 3.2 Գրել ծրագիր, որը մուտքում կստանա S1 և S2 բառերը (ոչ ավել քան 20 սիմվոլ) և կարտածի ‘YES’, եթե մուտքագրված բառերը հանդիսանում են անագրամ և ‘NO’ հակառակ դեպքում: (դաս 9)
- #include <iostream>
- void Bubble(char ch[], int size) {
- for (int i = 0; i < size - 1; i++)
- {
- bool swapped = false;
- for (int j = 0; j < size - i - 1; j++)
- {
- if (ch[j] > ch[j + 1]) {
- std::swap(ch[j], ch[j + 1]);
- swapped = true;
- }
- }
- if (!swapped) {
- return;
- }
- }
- }
- int Count(char ch[], int size) {
- int count = 0;
- for (int i = 0; i < size; i++)
- {
- if (ch[i] == '\0') {
- break;
- }
- count++;
- }
- return count;
- }
- bool is_same(char x[], char y[], int size) {
- for (int i = 0; i < size; i++)
- {
- if (x[i] != y[i]) {
- return false;
- }
- }
- return true;
- }
- int main() {
- const int size = 21;
- char a[size];
- char b[size];
- std::cin >> a;
- std::cin >> b;
- int size1 = Count(a, size);
- int size2 = Count(b, size);
- if (size1 != size2) {
- std::cout << "NO";
- }
- else {
- Bubble(a, size1);
- Bubble(b, size2);
- if (is_same(a, b, size1)) {
- std::cout << "YES";
- }
- else {
- std::cout << "NO";
- }
- }
- }
- 3.3 Գրել ծրագիր, որը մուտքում կստանա բառ (ոչ ավել քան 20 սիմվոլ) և կարտածի ‘YES’, եթե մուտքագրված բառը պալինդրոմ է և ‘NO’ հակառակ դեպքում: (դաս 9)
- #include <iostream>
- #include <string>
- int main() {
- //char string1[20];
- int flag = 0;
- std::string name;
- std::cin >> name;
- int length = name.size();
- for (int i = 0;i < length;i++) {
- if (name[i] != name[length - i - 1]) {
- flag = 1;
- break;
- }
- }
- if (flag) {
- std::cout << "NO";
- }
- else {
- std::cout << "YES";
- }
- }
- 3.4 Գրել ծրագիր, որը մուտքում կստանա S բառը (ոչ ավել քան 20 սիմվոլ), ապա ևս մեկ C սիմվոլ։ Անհրաժեշտ է արտածել S բառում առաջին C սիմվոլից աջ ընկած ենթաբառը։ (դաս 9)
- #include <iostream>
- using namespace std;
- int main()
- {
- const int size = 21;
- char string[size] = { 0 };
- cin >> string;
- int count = 0;
- while (string[count] != '\0') {
- count++;
- }
- char C;
- cin >> C;
- int i = 0;
- while (string[i] != C) {
- i++;
- if (i >= count) {
- break;
- }
- }
- for (int j = i + 1; j < count; j++) {
- cout << string[j];
- }
- }
- 3.5 Գրել ծրագիր, որը մուտքում կստանա S1 բառը (ոչ ավել քան 20 սիմվոլ), S2 բառը (ոչ ավել քան S1 բառում սիմվոլների քանակը) և կարտածի ‘YES’, եթե S2 հանդիսանում է ենթաբառ S1֊ից և ‘NO’ հակառակ դեպքում: (դաս 9)
- #include <iostream>
- using namespace std;
- int main()
- {
- const int size = 21;
- char string[size] = { 0 };
- char sub_string[size] = { 0 };
- cin >> string >> sub_string;
- int count = 0;
- while (string[count] != '\0') {
- count++;
- }
- int sub_count = 0;
- while (sub_string[sub_count] != 0) {
- sub_count++;
- }
- bool avilabale = false;
- for (int i = 0; i <= count - sub_count; i++) {
- if (string[i] == sub_string[0]) {
- for (int j = 0; j < sub_count; j++) {
- if (string[i + j] == sub_string[j]) {
- avilabale = true;
- }
- else {
- avilabale = false;
- break;
- }
- }
- }
- if (avilabale) {
- cout << "YES";
- break;
- }
- else {
- avilabale = false;
- }
- }
- if (!avilabale) {
- cout << "NO";
- }
- }
- 3.6 Գրել ծրագիր, որը մուտքում կստանա N բնական թիվ, ապա հաջորդականություն N ամբողջ տարրերից կազմված։ Անհրաժեշտ է, որ ծրագիրը արտածի հաջորդականության զույգ տարրերի քանակը։ Խնդիրը լուծելիս օգտագործել դինամիկ զանգված։ (դաս 10)
- #include <iostream>
- int main() {
- int n;
- std::cin >> n;
- int* arr = new int[n];
- for (int i = 0; i < n; i++)
- {
- std::cin >> arr[i];
- }
- int count = 0;
- for (int i = 0; i < n; i++)
- {
- if (arr[i] % 2 == 0) {
- count++;
- }
- }
- std::cout << count << " ";
- delete[] arr;
- }
- 3.7 Գրել ծրագիր, որը մուտքում կստանա N բնական թիվ, ապա հաջորդականություն N ամբողջ տարրերից կազմված։ Պահանջվում է արտածել հաջորդականության բոլոր այն տարրերը որոնք կրկնվում են։ Արտածվող թվերը միմյանցից պետք է բաժանված լինեն բացատանիշով։ Խնդիրը լուծելիս օգտագործել դինամիկ զանգված։ (դաս 10)
- #include <iostream>
- #include <climits>
- using namespace std;
- int main()
- {
- int n;
- cin >> n;
- int* arr = new int[n];
- for (int i = 0; i < n; i++) {
- cin >> arr[i];
- }
- int* temp_arr = new int[n];
- int count = 0;
- for (int i = 0; i < n; i++) {
- for (int j = i + 1; j < n; j++) {
- if (arr[i] == arr[j]) {
- temp_arr[count] = arr[i];
- count++;
- break;
- }
- }
- }
- for (int i = 0; i < count; i++) {
- bool flag = true;
- for (int j = 0; j < i; j++) {
- if (temp_arr[i] == temp_arr[j] && i != 0) {
- flag = false;
- break;
- }
- }
- if (flag) {
- cout << temp_arr[i] << " ";
- }
- }
- delete[] arr;
- delete[] temp_arr;
- }
- 3.8 Գրել ծրագիր, որը մուտքում կստանա N բնական թիվ, ապա հաջորդականություն N ամբողջ տարրերից կազմված։ Պահանջվում է արտածել հաջորդականության ամենաերկար խիստ աճող անընդհատ ենթահաջորդականության տարրերի քանակը։ (դաս 10)
- #include <iostream>
- int main() {
- int n;
- std::cin >> n;
- int* arr = new int[n];
- for (int i = 0; i < n; i++)
- {
- std::cin >> arr[i];
- }
- int max = 1;
- for (int i = 1; i < n; i++)
- {
- int count = 1;
- while (i<n && arr[i]>arr[i - 1]) {
- count++;
- i++;
- }
- if (count > max) {
- max = count;
- }
- }
- std::cout << max;
- delete[] arr;
- }
- 3.9 Գրել ծրագիր, որը մուտքում կստանա N բնական թիվ, ապա հաջորդականություն N ամբողջ տարրերից կազմված։ Պահանջվում է արտածել հաջորդականության յուրաքանչյուր տարրի կրկնությունների քանակը։ (դաս 10)
- #include <iostream>
- int main() {
- int n;
- std::cin >> n;
- int* arr = new int[n];
- for (int i = 0; i < n; i++)
- {
- std::cin >> arr[i];
- }
- for (int i = 0; i < n; i++)
- {
- int count = 0;
- for (int j = 0; j < n; j++)
- {
- if (arr[i] == arr[j])
- {
- count++;
- }
- }
- std::cout << count << " ";
- }
- delete[] arr;
- }
- 3.10 Գրել ծրագիր, որը մուտքում կստանա N բնական թիվ, ապա հաջորդականություն N ամբողջ տարրերից կազմված։ Պահանջվում է արտածել հաջորդականության այն երկու տարրերը որոնց գումարն ամենամոտն է 0֊ին։ Այդպիսիք մի քանիսը լինելու դեպքում արտածել առաջինը։ (դաս 10)
- #include <iostream>
- #include <limits>
- int main() {
- int n;
- std::cin >> n;
- int* arr = new int[n];
- for (int i = 0; i < n; i++)
- {
- std::cin >> arr[i];
- }
- int min = std::numeric_limits<int>::max();
- int el1 = -1;
- int el2 = -1;
- for (int i = 0; i < n; i++)
- {
- for (int j = i + 1; j < n; j++)
- {
- int res = arr[i] + arr[j];
- if (abs(res) < abs(min)) {
- min = res;
- el1 = arr[i];
- el2 = arr[j];
- }
- }
- }
- std::cout << el1 << " " << el2;
- delete[] arr;
- }
- 3.11 Գրել ծրագիր, որը մուտքում կստանա երկու 6x6 մատրիցներ՝ տող առ տող և կարտածի այդ մատրիցների տարբերությունը։ Անհրաժեշտ է արտածել մատրիցի տարրերը տող առ տող՝ նույն տողի տարրերը բաժանելով միմյանցից բացատանիշով։ (դաս 10)
- #include <iostream>
- int main() {
- const int n = 6;
- int** arr1 = new int* [n];
- for (int i = 0; i < n; i++)
- {
- arr1[i] = new int[n];
- }
- int** arr2 = new int* [n];
- for (int i = 0; i < n; i++)
- {
- arr2[i] = new int[n];
- }
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- std::cin >> arr1[i][j];
- }
- }
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- std::cin >> arr2[i][j];
- }
- }
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- std::cout << arr1[i][j]-arr2[i][j] << " ";
- }
- std::cout << "\n";
- }
- }
- 3.12 Գրել ծրագիր, որը մուտքում կստանա 5x10 մատրից՝ տող առ տող և կարտածի այդ մատրիցի տրանսպոնացված մատրիցան։ Անհրաժեշտ է արտածել մատրիցի տարրերը տող առ տող՝ նույն տողի տարրերը բաժանելով միմյանցից բացատանիշով։ (դաս 10)
- #include <iostream>
- int main() {
- const int n = 5;
- const int m = 10;
- int** arr = new int* [n];
- for (int i = 0; i < n; i++)
- {
- arr[i] = new int[m];
- }
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- {
- std::cin >> arr[i][j];
- }
- }
- int** trans = new int* [m];
- for (int i = 0; i < m; i++)
- {
- trans[i] = new int[n];
- }
- for (int i = 0; i < m; i++)
- {
- for (int j = 0; j < n; j++)
- {
- trans[i][j] = arr[j][i];
- }
- }
- for (int i = 0; i < m; i++)
- {
- for (int j = 0; j < n; j++)
- {
- std::cout << trans[i][j] << " ";
- }
- std::cout << "\n";
- }
- }
- 3.13 Գրել ծրագիր, որը մուտքում կստանա K (1 ≤ K ≤ 6) թիվը, ապա 6x5 մատրիցի տարրերը՝ տող առ տող։ Անհրաժեշտ է հեռացնել մատրիցից K֊րդ տողը և արտածել ստացված նոր մատրիցը։ Անհրաժեշտ է արտածել մատրիցի տարրերը տող առ տող՝ նույն տողի տարրերը բաժանելով միմյանցից բացատանիշով։ (դաս 10)
- #include <iostream>
- int main() {
- int k;
- std::cin >> k;
- const int n = 6;
- const int m = 5;
- int** arr = new int* [n];
- for (int i = 0; i < n; i++)
- {
- arr[i] = new int[m];
- }
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- {
- std::cin >> arr[i][j];
- }
- }
- for (int i = 0; i < n; i++)
- {
- if (i == k - 1) {
- continue;
- }
- for (int j = 0; j < m; j++)
- {
- std::cout << arr[i][j] << " ";
- }
- std::cout << "\n";
- }
- }
- 3.14 Գրել ծրագիր, որը մուտքում կստանա K (1 ≤ K ≤ 5) թիվը, ապա 6x5 մատրիցի տարրերը՝ տող առ տող։ Անհրաժեշտ է հեռացնել մատրիցից K֊րդ սյունը և արտածել ստացված նոր մատրիցը։ Անհրաժեշտ է արտածել մատրիցի տարրերը տող առ տող՝ նույն տողի տարրերը բաժանելով միմյանցից բացատանիշով։ (դաս 10)
- #include <iostream>
- int main() {
- int k;
- std::cin >> k;
- const int heigth = 6;
- const int length = 5;
- int** arr = new int* [heigth];
- for (int i = 0; i < heigth; i++)
- {
- arr[i] = new int[length];
- }
- for (int i = 0; i < heigth; i++)
- {
- for (int j = 0; j < length; j++)
- {
- std::cin >> arr[i][j];
- }
- }
- for (int i = 0; i < heigth; i++)
- {
- for (int j = 0; j < length; j++)
- {
- if (j == k - 1)
- continue;
- std::cout << arr[i][j] << " ";
- }
- std::cout << "\n";
- }
- }
- 3.15 Գրել ծրագիր, որը մուտքում կստանա 6x6 մատրիցի տարրերը՝ տող առ տող։ Անհրաժեշտ է սպիրալաձև արտածել մատրիցի տարրերը սկսելով մատրիցի առաջին տարրից։ (դաս 10)
- #include <iostream>
- int main() {
- const int heigth = 6;
- const int length = 6;
- int** arr = new int* [heigth];
- for (int i = 0; i < heigth; i++)
- {
- arr[i] = new int[length];
- }
- for (int i = 0; i < heigth; i++)
- {
- for (int j = 0; j < length; j++)
- {
- std::cin >> arr[i][j];
- }
- }
- int row = 0;
- for (int i = 0; i < heigth/2; i++)
- {
- for (int j = row; j < length-row; j++)
- {
- std::cout << arr[row][j] << " ";
- }
- for (int j = row+1; j < length-row; j++)
- {
- std::cout << arr[j][heigth-row-1] << " ";
- }
- for (int j = length-1-row-1; j >=row; j--)
- {
- std::cout << arr[heigth-row-1][j] << " ";
- }
- for (int j = heigth-1-row-1; j >row; j--)
- {
- std::cout << arr[j][row] << " ";
- }
- row++;
- }
- }
- 3.16 Գրել ծրագիր, որը մուտքում կստանա դրական թիվ և կարտածի ‘YES՛ եթե այդ թիվը պարզ է և ‘NO’ հակառակ դեպքում։ Ստուգումը անհրաժեշտ է կատարել ֆունկցիայի միջոցով։ (դաս 11)
- #include <iostream>
- void number_is_Prime_or_No(unsigned int x) {
- int k = 0;
- for (int j = 1; j <= x; j++)
- {
- if (x % j == 0) {
- k++;
- }
- }
- if (k == 2) {
- std::cout << "YES";
- }
- else {
- std::cout << "NO";
- }
- }
- int main() {
- unsigned int number;
- std::cin >> number;
- number_is_Prime_or_No(number);
- }
- 3.17 Գրել ծրագիր, որը մուտքում կստանա դրական ամբողջ թիվ և կարտածի այդ թվի երկուական ներկայացումը։ Տասականից երկուականի անցումը իրականացնել ֆունկցիայի միջոցով։ (դաս 11)
- #include <iostream>
- #include <string>
- std::string decimalToBinary(unsigned int n) {
- std::string res;
- if (n == 0) {
- return "0";
- }
- while (n != 0) {
- int num = n % 2;
- char symb = num + '0';
- res += symb;
- n /= 2;
- }
- return res;
- }
- int main() {
- unsigned int n;
- std::cin >> n;
- std::string binary = decimalToBinary(n);
- for (int i = binary.size() - 1; i >= 0; i--)
- {
- std::cout << binary[i];
- }
- }
- 3.18 Գրել ֆունկցիա, որը որպես արգումենտ կստանա n բնական թիվը և կվերադարձնի n!/(n+1) արտահայտության արժեքը։ Ապա հաշվել հետևյալ արտահայտության արժեքը 1!/2 + 2!/3 + 3!/4 + 4!/5 + 5!/6 + 6!/7 + 7!/8 + 8!/9 + 9!/10 + 10!/11: Պատասխանը արտածել 5 նշի ճշտությամբ։ (դաս 11)
- #include <iostream>
- double Value(int n) {
- double fact = 1;
- for (int i = 1; i <= n; i++)
- {
- fact *= i;
- }
- return fact / (n + 1);
- }
- double Sum() {
- double sum = 0;
- for (int i = 1; i <= 10; i++)
- {
- sum += Value(i);
- }
- return sum;
- }
- int main() {
- std::cout.precision(5);
- std::cout << std::fixed << Sum();
- }
- 3.19 Պահանջվում է գրել ծրագիր, որը մուտքում կստանա A և B ամբողջ թվերը և O (+, -, *, /, %) գործողության նշանը։ Ծրագիրը որպես աշխատանքի արդյունք պետք է արտածի O գործողությունը կիրառված A և B թվերի նկատմամաբ։ Անհրաժեշտ է յուրաքանչյուր գործողության համար ստեղծել առանձին ֆունկցիա։ (դաս 11)
- #include <iostream>
- int add(int a, int b) {
- return a + b;
- }
- int sub(int a, int b) {
- return a - b;
- }
- int multy(int a, int b) {
- return a * b;
- }
- int divide(int a, int b) {
- return a / b;
- }
- int mod(int a, int b) {
- return a % b;
- }
- void Switch(int a, int b, char ch) {
- switch (ch)
- {
- case '+':
- std::cout << add(a, b);
- break;
- case '-':
- std::cout << sub(a, b);
- break;
- case '*':
- std::cout << multy(a, b);
- break;
- case '/':
- std::cout << divide(a, b);
- break;
- case '%':
- std::cout << mod(a, b);
- break;
- default:
- break;
- }
- }
- int main() {
- int a, b;
- char ch;
- std::cin >> a >> b >> ch;
- Switch(a, b, ch);
- }
- 3.20 Պահանջվում է գրել ծրագիր, որը մուտքում կստանա եռանկան 3 կողմերը և կարտածի դռա մակերեսը։ Խնդիրը լուծելու համար օգտվել Հերոնի բանաձևից և sqrt() ֆունկցիայից։ (դաս 11)
- #include <iostream>
- #include<cmath>
- void Heron(double a, double b, double c) {
- double d = (a + b + c) / 2;
- std::cout << sqrt(d * (d - a) * (d - b) * (d - c));
- }
- int main() {
- double a, b, c;
- std::cin >> a >> b >> c;
- Heron(a, b, c);
- }
- 3.21 Գրել ծրագիր, որը մուտքում կստանա n (1 ≤ n ≤ 10) և կարտածի մուտքային թվի ֆակտորիալի և ֆիբոնաչիի հաջորդականության n֊րդ տարրի հարաբերությունը: Անհրաժեշտ է, որ թվի ֆակտորիալ հաշվելու և ֆիբոնաչիի հաջորդականության n֊րդ տարրի հաշվարկի ֆունկցիաները լինեն ռեկուրսիվ: (դաս 12)
- #include <iostream>
- double fact(double n) {
- if (n <= 1) {
- return 1;
- }
- else {
- return n * fact(n - 1);
- }
- }
- double fib(double n) {
- if (n == 0) {
- return 0;
- }
- if (n == 1) {
- return 1;
- }
- else {
- return fib(n - 1) + fib(n - 2);
- }
- }
- int main() {
- double n;
- std::cin >> n;
- std::cout.precision(5);
- std::cout << std::fixed << fact(n) / fib(n);
- }
- 3.22 Գրել ծրագիր, որը մուտքում կստանա երկու բնական թվեր և կարտածի դրանց ամենամեծ ընդհանուր բաժանարարը: Անհրաժեշտ է խնդիրը լուծել ռեկուրսիվ ֆունկցիայի միջոցով։ (դաս 12)
- #include<iostream>
- using namespace std;
- int TheGreatestCommonDivisor(int a, int b) {
- if (a == 0 || b == 0)
- return 0;
- else if (a == b)
- return a;
- else if (a > b)
- return TheGreatestCommonDivisor(a - b, b);
- else return TheGreatestCommonDivisor(a, b - a);
- }
- int main() {
- int a;
- std::cin >> a;
- int b;
- std::cin >> b;
- cout << TheGreatestCommonDivisor(a, b);
- return 0;
- }
- 3.23 Գրել ծրագիր որը մուտքում տրված n ≥ 0 ամբողջ և x իրական թվերի համար գտնում է Չեբիշևի բազմանդամի n-րդ գործակիցը։ Չեբիշևի Tn(x) բազմանդամը սահմանվում է հետևյալ ձևով. (դաս 12)
- T0(x) = 1
- T1(x) = x
- Tn(x) = 2 * x * Tn-1(x) - Tn-2(x), n = 2, 3, ...
- #include <iostream>
- double Chebishev(unsigned int n, double x) {
- if (n == 0)
- {
- return 1;
- }
- if (n == 1)
- {
- return x;
- }
- else
- {
- return 2 * x * Chebishev(n - 1, x) - Chebishev(n - 2, x);
- }
- }
- int main() {
- unsigned int x;
- double y;
- std::cin >> x >> y;
- double res = Chebishev(x, y);
- std::cout.precision(5);
- std::cout << std::fixed << res;
- }
- 3.24 Տրված է Kn ռեկուրենտ հաջորդականություն, որի Ki տարրը որշվում է հետևյալ կանոններով․
- Ki = i, եթե i ≤ 3
- Ki = 2 * Ki + 3, եթե i-ն կենտ է և i > 3
- Ki = 3 + Ki / 2, եթե i-ն զույգ է և i > 3
- Գրել ծրագիր որը մուտքում կստանա i (i ≤ 1000000000) բնական թիվը և կարտածի հաջորդականության i֊րդ տարրը: (դաս 12)
- #include <iostream>
- int Recursion(int i) {
- if (i <= 3) {
- return i;
- }
- if (i % 2 == 1) {
- return 2 * Recursion(i + 3);
- }
- else {
- return 3 + Recursion(i / 2);
- }
- }
- int main() {
- unsigned int n;
- std::cin >> n;
- std::cout << Recursion(n);
- }
- 3.25 Պահանջվում է գրել ծրագիր, որը մուտքում կստանա երկու 10 երկարության սորտավորված զանգված և կարտածի այդ զանգվածների միավորման արդյունքում ստացված սորտավորված զանգվածը։ (դաս 12)
- #include <iostream>
- using namespace std;
- void Print(int arr[], int size) {
- for (int i = 0; i < size; i++) {
- cout << arr[i] << " ";
- }
- }
- void Merge(int arr1[], int arr2[], int size) {
- int* arr= new int[2 * size];
- int i = 0;
- int j = 0;
- int k = 0;
- while (i < size && j < size) {
- if (arr1[i] > arr2[j]) {
- arr[k] = arr2[j];
- j++;
- }
- else {
- arr[k] = arr1[i];
- i++;
- }
- k++;
- }
- if (i == size) {
- while (j < size) {
- arr[k] = arr2[j];
- j++;
- k++;
- }
- }
- else {
- while (i < size) {
- arr[k] = arr1[i];
- i++;
- k++;
- }
- }
- Print(arr, 2 * size);
- }
- int main()
- {
- int size = 10;
- int* arr = new int[size];
- for (int i = 0; i < size; i++)
- {
- cin >> arr[i];
- }
- int* arr2 = new int[size];
- for (int i = 0; i < size; i++)
- {
- cin >> arr2[i];
- }
- Merge(arr, arr2, size);
- }
- 3.26 Պահանջվում է գրել ծրագիր, որը մուտքում ստանում է N բնական թիվ, ապա հաջորդականություն N ամբողջ տարրերից կազմված։ Անհրաժեշտ է, որ ծրագիրը արտածի հաջորդականության տարրերը դասավորված նվազման կարգով։ Արտածվող թվերը միմյանցից պետք է բաժանված լինեն բացատանիշով։ Խնդիրը լուծելիս օգտագործել զանգված և merge sort ալգորիթմ։ (դաս 12)
- #include <iostream>
- using namespace std;
- void Merge(int arr[], int l, int m, int r) {
- int n1 = m - l + 1;
- int* arr1 = new int[n1];
- for (int i = 0; i < n1; i++) {
- arr1[i] = arr[l + i];
- }
- int n2 = r - m;
- int* arr2 = new int[n2];
- for (int i = 0; i < n2; i++) {
- arr2[i] = arr[m + 1 + i];
- }
- int i = 0;
- int j = 0;
- int k = l;
- while (i < n1 && j < n2) {
- if (arr1[i] > arr2[j]) {
- arr[k] = arr1[i];
- i++;
- }
- else {
- arr[k] = arr2[j];
- j++;
- }
- k++;
- }
- while (i < n1) {
- arr[k] = arr1[i];
- i++;
- k++;
- }
- while (j < n2) {
- arr[k] = arr2[j];
- j++;
- k++;
- }
- delete[] arr1;
- delete[] arr2;
- }
- void Sort(int arr[], int l, int r) {
- if (l < r) {
- int m = l + ((r - l) / 2);
- Sort(arr, l, m);
- Sort(arr, m + 1, r);
- Merge(arr, l, m, r);
- }
- }
- void Print(int arr[], int n) {
- for (int i = 0; i < n; i++) {
- cout << arr[i] << " ";
- }
- }
- int main()
- {
- int n;
- cin >> n;
- int* arr = new int[n];
- for (int i = 0; i < n; i++) {
- cin >> arr[i];
- }
- Sort(arr, 0, n - 1);
- Print(arr, n);
- }
Add Comment
Please, Sign In to add comment