이 섹션에서 우리는 한 가지 흥미로운 문제를 볼 것입니다. N개의 동전이 있습니다. 우리는 동전을 피라미드로 배열할 때 만들 수 있는 최대 높이를 찾아야 합니다. 이런 식으로 첫 번째 줄에는 1개의 동전이, 두 번째 줄에는 2개의 동전이 들어가는 식입니다. 주어진 다이어그램에서 높이가 3인 피라미드를 만들려면 최소 6개의 동전이 필요하다는 것을 알 수 있습니다. 우리는 10개의 동전이 생길 때까지 높이 4를 만들 수 없습니다. 이제 최대 높이를 확인하는 방법을 알아보겠습니다. 이 공식을 사용하여 높이를 얻을 수 있습니다.
여기에서 우리는 아래의 피라미드와 같이 만들기 위해 필요한 성냥개비의 수를 계산하는 방법을 볼 것입니다. 피라미드의 기초가 주어집니다. 따라서 기본이 1이면 피라미드를 만드는 데 3개의 성냥개비가 필요하고 기본 2의 경우 9개의 성냥개가 필요하고 기본 크기 3의 경우 18개의 성냥개가 필요합니다. 이 문제를 해결하려면 다음 공식을 사용해야 합니다. - 예시 #include <iostream> using namespace std; int main(){ int x; co
배열의 반전은 다음을 나타냅니다. 배열을 정렬된 형식으로 변환하는 데 필요한 변경 수. 배열이 이미 정렬되어 있으면 반전이 0개 필요하고, 그 외의 경우 배열이 반전되면 반전 수가 최대가 됩니다. 이 문제를 해결하기 위해 병합 정렬 방식을 따라 시간 복잡도를 줄이고 분할 정복 알고리즘으로 만들 것입니다. 입력 A sequence of numbers. (1, 5, 6, 4, 20). 출력 숫자를 오름차순으로 정렬하는 데 필요한 반전 횟수입니다. Here the number of inversions are 2. First inver
여기에서는 정수의 설정 비트 수를 확인하는 방법을 살펴보겠습니다. 세트 비트는 숫자의 이진 표현에서 1입니다. 예를 들어 숫자 13에는 3개의 세트 비트 1101이 있습니다. 따라서 카운트는 3이 됩니다. 이 문제를 해결하기 위해 숫자를 오른쪽으로 이동하고 LSb가 1이면 개수를 늘립니다. 숫자가 0이 될 때까지 실행됩니다. 알고리즘 countSetBit() begin count := 0 while count is not 0, do if LSb o
이 프로그램에서는 배열에서 홀수 번 발생하는 숫자를 얻는 방법을 볼 것입니다. 다양한 접근 방식이 있습니다. 가장 쉬운 방법 중 하나는 ZOR 연산을 수행하는 것입니다. 숫자가 자신과 XOR되면 0이 됩니다. 따라서 숫자가 짝수 번 XOR되면 0이 되고 그렇지 않으면 숫자 자체가 됩니다. 이 솔루션에는 한 가지 문제가 있습니다. 둘 이상의 요소가 홀수번 발생하면 그 중 하나를 반환합니다. 알고리즘 getNumOccurredOdd(arr, n) begin res := 0 for each
여기에서 간단한 C 또는 C++ 코드를 작성하여 시스템을 종료하는 방법을 살펴보겠습니다. 종료 프로세스는 OS마다 다릅니다. Linux 사용자인 경우 이 터미널 명령을 사용하여 종료할 수 있습니다. shutdown –P now Windows 시스템을 사용하는 경우 다음 명령을 사용할 수 있습니다. - c:\\windows\\system32\\shutdown /i Linux 및 Windows용 코드가 표시됩니다. 예시(리눅스) #include<iostream> using namespace std; int ma
정수 배열이 제공됩니다. 인접한 모든 요소의 합을 찾아야 합니다. 합계가 가장 큰 쪽이 출력으로 전송됩니다. 동적 프로그래밍을 사용하여 현재 기간까지의 최대 합계를 저장합니다. 배열의 연속 요소에 대한 합을 찾는 데 도움이 됩니다. Input: An array of integers. {-2, -3, 4, -1, -2, 1, 5, -3} Output: Maximum Sum of the Subarray is : 7 알고리즘 최대합(배열, n) 입력 - 기본 배열, 배열의 크기입니다. 출력 - 최대 합계. Begin &
여기서 우리는 두 숫자의 GCD를 찾는 유클리드 알고리즘을 볼 것입니다. GCD(최대공약수)는 유클리드 알고리즘을 사용하여 쉽게 찾을 수 있습니다. 두 가지 다른 접근 방식이 있습니다. 하나는 반복적이며 다른 하나는 재귀적입니다. 여기서 우리는 재귀적 유클리드 알고리즘을 사용할 것입니다. 알고리즘 유클리드 알고리즘(a, b) begin if a is 0, then return b end if return gcd(b mod a,
이것은 유명한 퍼즐 문제입니다. n층짜리 건물이 있고 m개의 계란이 있다고 가정하고 계란을 깨뜨리지 않고 떨어뜨리는 것이 안전한 바닥을 찾는 데 필요한 최소 방울 수를 어떻게 찾을 수 있습니까? 기억해야 할 몇 가지 중요한 사항이 있습니다 - 알이 특정 층에서 깨지지 않으면 더 낮은 층에서도 깨지지 않습니다. 알이 특정 층에서 깨지면 모든 위층에서 깨집니다. 계란이 깨지면 버려야 합니다. 그렇지 않으면 다시 사용할 수 있습니다. 입력 - 계란의 수와 최대 층수. 알의 수가 4이고 최대 바닥이 10이라고 가정해 보겠습니다.
매크로가 C 또는 C++에서 사용된다는 것을 알고 있지만 유형 검사를 위한 기능은 없습니다. 매크로는 모든 유형의 인수를 사용할 수 있습니다. 다음 예는 이 경우를 명확하게 보여줍니다. 예시 #include<stdio.h> #define INCREMENT(X) ++X main() { int x = 5; float y = 2.56; char z = 'A'; printf("Integer Increment: %d\n", INCREMENT(x)); &
C 및 C++에는 몇 가지 함수 지정자가 있습니다. 함수 지정자는 functions 속성을 지정하는 데 사용됩니다. C++에는 인라인이 있습니다. 함수 지정자. C에는 _Noreturn 함수 지정자가 있습니다. 이것은 한 함수가 아무 것도 반환하지 않음을 나타내는 데 사용됩니다. 예시 #include<stdio.h> int myAdd(int a, int b){ return a + b; } main() { int x = 10, y = 20; printf(
이 섹션에서는 역추적 접근 방식을 사용하여 n비트의 그레이 코드를 생성하는 방법을 살펴보겠습니다. n비트 그레이 코드는 기본적으로 0에서 2^n – 1까지의 비트 패턴으로 연속적인 패턴이 1비트씩 다릅니다. 따라서 n =2의 경우 그레이 코드는 (00, 01, 11, 10)이고 등가 10진수는 (0, 1, 3, 2)입니다. 프로그램은 그레이 코드 값에 해당하는 10진수를 생성합니다. 알고리즘 그레이 생성(arr, n, num) begin if n = 0, then inse
이 섹션에서 우리는 한 가지 문제를 볼 것입니다. 여기서 n개의 요소가 배열에 제공됩니다. 배열의 순열이 존재하는지 여부를 확인해야 합니다. 각 요소가 앞이나 뒤에 있는 요소의 수를 나타내도록 하는 것입니다. 배열 요소가 {2, 1, 3, 3}이라고 가정합니다. 적절한 순열은 {3, 1, 2, 3}과 같습니다. 여기서 처음 3은 그 다음에 3개의 요소가 있음을 나타내고 1은 이 앞에 하나의 요소만 있음을 나타냅니다. 2는 앞에 두 개의 요소가 있음을 나타내고 마지막 3은 앞에 세 개의 요소가 있음을 나타냅니다. 알고리즘 check
우리는 이진 탐색 알고리즘이 선형 탐색 알고리즘보다 낫다는 것을 알고 있습니다. 이 알고리즘은 실행하는 데 O(log n) 시간이 걸립니다. 대부분의 경우 구현된 코드에는 몇 가지 문제가 있습니다. 아래와 같은 하나의 이진 검색 알고리즘 기능을 고려해 보겠습니다. - 예시 int binarySearch(int array[], int start, int end, int key){ if(start <= end){ int mid = (start + end) /2); //m
여기서 우리는 두 문자열이 서로 회전하는지 여부를 알 수 있는 하나의 프로그램을 볼 것입니다. 문자열의 회전은 −와 같습니다. 두 문자열이 S1 =HELLO, S2 =LOHEL이라고 가정하면 서로 회전합니다. HELLO를 왼쪽으로 세 위치 회전하면 LOHEL이 됩니다. 이 문제를 해결하기 위해 첫 번째 문자열을 자신과 연결한 다음 연결된 문자열에 두 번째 문자열이 있는지 확인합니다. 따라서 HELLO의 경우 HELLOHEL이 됩니다. 봐라. 그런 다음 이 연결된 문자열에 LOHEL이 포함됩니다. [안녕하세요]. 알고리즘 isR
여기에서 선택 정렬에 대한 몇 가지 개선 사항을 볼 수 있습니다. 선택 정렬은 배열에서 최소 또는 최대 요소를 가져와 올바른 위치에 배치하여 작동한다는 것을 알고 있습니다. 이 접근 방식에서는 배열을 두 가지 방식으로 정렬하려고 합니다. 여기서 우리는 최대값과 최소값을 동시에 취한 다음 두 끝에서 배열을 정렬합니다. 더 나은 아이디어를 얻기 위해 알고리즘을 살펴보겠습니다. 알고리즘 twoWaySelectionSort(arr, n) begin for i := 0, and j := n-1, increase i b
이 섹션에서는 근의 합과 4차 방정식의 근의 곱 사이의 절대차를 구하는 방법을 볼 것입니다. 4차 방정식은 𝑎𝑥4와 같습니다. +𝑏𝑥3 +𝑐𝑥2 +𝑑𝑥+𝑒 우리는 방정식을 풀고 어떤 정상적인 과정을 통해 근의 곱과 합을 구하려고 시도할 수 있지만, 그것은 많은 시간이 걸리고 그 접근 방식은 그다지 효율적이지 않습니다. 이러한 종류의 방정식에는 두 가지 공식이 있습니다. 근의 합은 항상 −𝑏∕𝑎 이고 근의 곱은 항상 𝑒∕𝑎 입니다. 따라서 ∣−𝑏∕𝑎− 𝑒∕𝑎∣ ∣ 의 값만 찾아야 합니다. 알고리즘 r
여기서 우리는 숫자 N의 첫 번째와 마지막 X 자리 사이의 차이를 구하는 방법을 볼 것입니다. 숫자와 X가 주어집니다. 이 문제를 해결하려면 숫자의 길이를 찾은 다음 모듈러스 연산자를 사용하여 마지막 x자리를 잘라야 합니다. 그런 다음 첫 번째 x 자릿수를 제외한 숫자에서 모든 자릿수를 자릅니다. 그런 다음 차이를 구하고 결과를 반환합니다. 숫자를 N =568424라고 합시다. X는 2이므로 처음 두 자리는 56이고 마지막 두 자리는 24입니다. 차이는 (56 - 24) =32입니다. 알고리즘 diffFirstLastDigits(N
여기서 우리는 배열의 모든 소수의 곱과 모든 비 소수의 곱 사이의 절대 차이를 찾는 방법을 볼 것입니다. 이 문제를 해결하려면 숫자가 소수인지 확인해야 합니다. 소수 테스트를 위한 한 가지 가능한 방법은 숫자가 2에서 해당 숫자의 제곱근 사이의 숫자로 나누어지지 않는지 확인하는 것입니다. 따라서 이 프로세스는 𝑂(√𝑛) 시간이 걸립니다. 그런 다음 제품을 구입하고 절대적인 차이점을 찾아보십시오. 알고리즘 diffPrimeNonPrimeProd(arr) begin prod_p := product of all
여기서 우리는 배열의 모든 소수의 합과 모든 비 소수의 합 사이의 절대 차이를 찾는 방법을 볼 것입니다. 이 문제를 해결하려면 숫자가 소수인지 확인해야 합니다. 소수 테스트를 위한 한 가지 가능한 방법은 숫자가 2에서 해당 숫자의 제곱근 사이의 숫자로 나누어지지 않는지 확인하는 것입니다. 따라서 이 프로세스는 𝑂(√𝑛) 시간이 걸립니다. 그런 다음 합계를 구하고 절대 차이를 찾으십시오. 알고리즘 diffPrimeNonPrimeSum(arr) begin sum_p := sum of all prime numb