GCD GCD는 0을 제외한 두 개 이상의 정수의 최대공약수를 나타냅니다. 예를 들어 48과 180의 최대 공약수를 구하려면 48 =2 × 2 × 2 × 2 × 3 180 =2 × 2 × 3 × 3 × 5 최대공약수 =2 × 2 × 3 =12. 주어진 문제에서 N 라인은 지정된 대로 GCD가 있는 요소로 인쇄되어야 합니다. Input : N=2 GCD=2 Ouput : 2-4-6-10 14-16-18-22 알고리즘 START Step 1 -> take input n(e.g. 2) and k(e.g. 2) as i
두 개의 숫자 x와 y가 주어졌을 때 출력은 k번째 공약수를 포함해야 합니다. Input: x=9 y=18 k=1 Output : k common factor = 2 Factors of 9 : 1, 3, 9 Factors of 18 : 1, 2, 3, 6, 9, 18 Greatest Common Factor : 9 알고리즘 START Step 1 -: take input as x and y lets say 3 and 21 and k as 1 Step 2 -: declare start variables as int i,num,coun
Newman-Conway 시퀀스는 다음 정수 시퀀스를 생성하는 데 사용됩니다. 1 1 2 2 3 4 4 4 5 6 7 7 8 8 8 8 9 10 11 12 n개의 수에 대한 Newman-Conway 시퀀스를 생성하는 데 사용되는 공식은 -입니다. P(n) = P(P(n - 1)) + P(n - P(n - 1)) Where, p(1) =p(2) =1 알고리즘 START Step 1 -> Input variable n(e.g. 20) Step 2 -> start variables as i, p[n+1], p[1]=1, p[
k 요소의 배열이 주어지면 프로그램은 나타나는 순서대로 그 중에서 가장 작은 n개의 요소를 찾아야 합니다. Input : arr[] = {1, 2, 4, 3, 6, 7, 8}, k=3 Ouput : 1, 2, 3 Input k is 3 it means 3 shortest elements among the set needs to be displayed in original order like 1 than 2 and than 3 알고리즘 START Step 1 -> start variables as int i, max, pos,
주어진 방정식으로 프로그램은 a+b<=n이고 x로 나눌 수 있는 a의 값을 찾아야 합니다. 알고리즘 START Step 1 -> Declare start variables b=10, x=9, n=40 and flag=0, divisible Step 2 -> Loop For divisible = (b / x + 1 ) * x and divisible <= n and divisible += x IF divisible - b >= 1 Print divisi
여기에서 주어진 문제 패턴에 따라 재귀 접근 방식을 사용하여 표시해야 합니다. 재귀 함수 n 번 자신을 호출하는 것입니다. 프로그램에는 n개의 재귀 함수가 있을 수 있습니다. 재귀 함수로 작업하는 문제는 복잡성입니다. 알고리즘 START Step 1 -> function int printpattern(int n) If n>0 Printpattern(n-1) Print * End IF End Step
여기서 우리는 하나의 행렬 확률 문제를 볼 것입니다. 하나의 직사각형 행렬이 있습니다. 동일한 확률로 현재 셀에서 4방향으로 이동할 수 있습니다. 이 4가지 방향은 왼쪽, 오른쪽, 위, 아래입니다. N이 위치 M[i, j]에서 이동한 후 확률을 계산해야 합니다. 여기서는 DFS와 관련된 작업을 수행합니다. 우리는 현재 방에서 가능한 4개의 방 각각을 재귀적으로 순회할 것입니다. 그런 다음 우리는 한 번의 적은 움직임으로 확률을 계산할 것입니다. 네 방향 각각이 동일한 확률을 가지므로 각 방향은 총 확률의 0.25에 기여합니다. 행
이 섹션에서 우리는 한 가지 흥미로운 문제를 볼 것입니다. 두 개의 코드 세그먼트가 표시됩니다. 둘 다 두 개의 중첩 루프가 있습니다. 어느 것이 더 빨리 실행될 것인지 식별해야 합니다. (컴파일러가 코드를 최적화하지 않는다고 가정합니다.) 세그먼트 1 for(int i = 0; i < 10; i++){ for(int j = 0; j<100; j++){ //code } } 세그먼트 2 for(int i = 0; i < 100; i++
여기에서 Pancake sort라는 또 다른 정렬 문제를 볼 수 있습니다. 이 문제는 간단합니다. 하나의 배열이 있습니다. 우리는 이것을 정렬해야 합니다. 그러나 우리는 rev(arr, i)라는 하나의 연산만 사용할 수 있습니다. 이렇게 하면 0에서 i번째 위치로 arr의 요소가 반전됩니다. 이 아이디어는 선택 정렬과 같습니다. 배열의 크기를 줄인 끝에 max 요소를 반복적으로 배치합니다. 아이디어를 얻을 수 있는 알고리즘을 살펴보겠습니다. 알고리즘 pancakeSort(arr, n) Begin size :
여기서 우리는 하나의 퍼즐을 볼 것입니다. 아래와 같이 주어진 프로그램이 있다고 가정하면, 우리는 무엇을 출력할 것이며 그 이유를 말해야 합니까? 예시 #include<iostream> using namespace std; int main() { int x = 0xab; ~x; cout << hex << x; } 그럼 출력은 어떻게 될까요? ~x는 보수 연산을 수행하고 있습니다. 그러면 보완된 결과를 16진수 형식으로 표시합니까?
미로의 쥐 문제는 잘 알려진 역추적 문제 중 하나입니다. 여기에서 우리는 약간의 변화로 그 문제를 볼 것입니다. 하나의 NxN 미로 M이 주어졌다고 가정합니다. 시작점은 왼쪽 위 모서리 M[0, 0]이고 목적지는 오른쪽 아래 모서리 M[N – 1, N – 1]입니다. 한 마리의 쥐가 시작점에 배치됩니다. 우리의 목표는 쥐가 목적지에 도달할 수 있는 시작점에서 끝점까지의 경로를 찾는 것입니다. 여기에서 쥐는 점프할 수 있습니다(변형). 이제 몇 가지 제약이 있습니다. 쥐는 오른쪽이나 아래쪽으로 움직일 수 있습니다. 셀에 0이 있는
3입니다. 값이 true 또는 1이면 활성 상태를 나타내고 0 또는 false는 비활성 상태를 나타냅니다. 또 다른 숫자 k도 주어진다. k일 후에 활성 또는 비활성 세포를 찾아야 합니다. i번째 셀의 일상 상태 이후 왼쪽과 오른쪽 셀이 같지 않으면 활성화되고 같으면 비활성화됩니다. 맨 왼쪽과 맨 오른쪽 셀에는 앞뒤에 셀이 없습니다. 따라서 가장 왼쪽 및 오른쪽 대부분의 셀은 항상 0입니다. 아이디어를 얻기 위해 한 가지 예를 살펴보겠습니다. 하나의 배열이 {0, 1, 0, 1, 0, 1, 0, 1}이고 k 값이 3이라고 가정합니
여기에서는 연결 목록에 저장된 숫자로 1을 추가하는 방법을 살펴보겠습니다. 연결 목록에는 숫자의 각 자릿수가 저장됩니다. 숫자가 512이면 아래와 같이 저장됩니다 - 512 = (5)-->(1)-->(2)-->NULL 증분 함수에 목록을 제공하고 있습니다. 1을 추가한 후 다른 목록을 반환합니다. 여기서는 C++ STL 연결 목록을 사용하고 있습니다. 더 나은 아이디어를 내기 위한 알고리즘을 살펴보겠습니다. 알고리즘 증가 목록(l1) Begin carry := 1 re
이 섹션에서 우리는 한 가지 흥미로운 문제를 볼 것입니다. 하나의 숫자가 주어진다고 가정합니다. 이 숫자를 1로 늘려야 합니다. 이것은 매우 간단한 작업입니다. 그러나 여기서는 숫자를 배열로 배치합니다. 해당 숫자의 각 숫자는 배열의 요소로 배치됩니다. 번호가 512이면 {5, 1, 2}로 저장됩니다. 또한 재귀 접근 방식을 사용하여 숫자를 늘려야 합니다. 명확한 아이디어를 얻기 위해 알고리즘을 살펴보겠습니다. 알고리즘 증가(arr, n, 인덱스) 초기 인덱스의 기본값은 0입니다. begin if index
여기서 우리는 한 가지 문제를 보게 될 것입니다. 두 개의 배열 요소를 추가하고 다른 배열에 저장할 것입니다. 그러나 우리는 몇 가지 제약을 따를 것입니다. 이러한 제약 조건은 다음과 같습니다 - 더하기는 두 배열의 0번째 인덱스부터 명시해야 합니다. 합계가 한 자리 이상인 경우 분할하고 각 자리를 해당 위치에 배치합니다. 더 큰 입력 배열의 나머지 숫자는 출력 배열에 저장됩니다. 아이디어를 얻을 수 있는 알고리즘을 살펴보겠습니다. 알고리즘 addArrayConstraints(arr1, arr2) Begin &nb
이 섹션에서 우리는 하나의 배열에 n개의 숫자가 주어지는지, 이 숫자의 모든 요소를 사용하여 숫자를 만드는지 확인해야 합니다. 그 숫자가 3으로 나누어 떨어지는지 여부를 확인해야 합니다. 배열 요소가 {15, 24, 23, 13}이면 15242313과 같은 정수를 만들 수 있습니다. 3으로 나눌 수 있습니다. 알고리즘 checkDivThree(arr) Begin rem := 0 for each element e in arr, do rem := (
여기서 우리는 임의의 수의 계승 결과에 대해 후행 0의 수를 계산하는 방법을 볼 것입니다. 따라서 n =5이면 5입니다! =120. 뒤에 오는 0은 하나만 있습니다. 20!의 경우 4개의 0이 20이 됩니다! =2432902008176640000. 가장 쉬운 방법은 계승을 계산하고 0을 계산하는 것입니다. 그러나 이 접근 방식은 n의 값이 크면 실패합니다. 그래서 우리는 다른 접근 방식을 따를 것입니다. 소인수가 2와 5인 경우 후행 0이 있을 것입니다. 2와 5를 계산하면 결과를 얻을 수 있습니다. 이를 위해 우리는 이 규칙을
여기서는 별도의 연결 리스트에 저장된 두 개의 숫자를 추가하는 방법을 살펴보겠습니다. 연결 목록에는 숫자의 각 자릿수가 저장됩니다. 숫자가 512이면 아래와 같이 저장됩니다 - 512 = (5)-->(1)-->(2)-->NULL 우리는 이 유형의 두 가지 목록을 제공하고 있으며, 우리의 임무는 그것들을 더하고 합계를 계산한 후 결과를 얻는 것입니다. 여기서는 C++ STL 연결 목록을 사용하고 있습니다. 더 나은 아이디어를 내기 위한 알고리즘을 살펴보겠습니다. 알고리즘 목록 번호 추가(l1, l2) Begin &n
여기서 우리는 하나의 간단한 문제를 볼 것입니다. 주어진 목록에서 본질적으로 회문인 모든 숫자를 찾아야 합니다. 접근 방식은 간단합니다. 목록에서 각 숫자를 가져와 회문인지 확인하고 숫자를 인쇄하십시오. 알고리즘 getAllPalindrome(arr, n) Begin for each element e in arr, do if e is palindrome, then print e  
여기서 우리는 각 절반의 합이 동일한 n비트(n은 사용자가 제공함)의 가능한 모든 이진수를 볼 수 있습니다. 예를 들어 숫자가 10001인 경우 10과 01은 합이 같고 반쪽이 다르기 때문에 동일합니다. 여기에서 해당 유형의 모든 숫자를 생성합니다. 알고리즘 genAllBinEqualSumHalf(n, 왼쪽, 오른쪽, 차이) 왼쪽과 오른쪽은 처음에 비어 있고 diff는 왼쪽과 오른쪽의 차이를 유지합니다. Begin if n is 0, then if diff is 0, t