정수 집합이 있다고 가정합니다. 주어진 집합의 하위 집합에서 형성될 수 있는 고유한 합계를 찾아 오름차순으로 인쇄합니다. 배열 요소의 합이 작습니다. 배열 요소가 [1, 2, 3]과 같다고 가정합니다. 출력은 0, 1, 2, 3, 4, 5, 6입니다. 고유한 하위 집합은 {}, {1}, {2}, {3}, {1, 2}, {2, 3}, {1입니다. , 3}, {1, 2, 3}, 합계 값은 0, 1, 2, 3, 3, 5, 4, 6입니다. 이를 해결하기 위해 동적 프로그래밍 방식을 사용합니다. 주어진 요소의 합이 작을 때 배열의 크기를
이 튜토리얼에서는 주어진 이진 트리의 상위 뷰에 나타나는 모든 노드를 인쇄하는 프로그램에 대해 논의할 것입니다. 특정 이진 트리의 경우 노드가 수평 거리에서 맨 처음 노드인 경우 상위 뷰에 노드가 나타납니다. 노드 x의 왼쪽 노드에 대한 수평 거리는 x-1이고 노드 x의 오른쪽 노드에 대한 수평 거리는 x+1입니다. 이 문제를 해결하기 위해 레벨 순서 순회를 수행하여 특정 레벨에 있는 다른 노드보다 먼저 특정 레벨에 대한 최상위 노드를 얻습니다. 또한 선택한 노드가 상위 뷰에 표시되는지 여부를 확인하기 위해 해싱을 사용합니다.
여기에서는 주어진 집합의 모든 고유한 하위 집합을 표시하는 방법을 볼 것입니다. 따라서 집합이 {1, 2, 3}이면 하위 집합은 {}, {1}, {2}, {3}, {1, 2}, {2, 3}, {1, 3}이 됩니다. , {1, 2, 3}. 모든 부분 집합의 집합을 거듭제곱 집합이라고 합니다. 거듭제곱 집합에는 2n개의 요소가 있습니다. 0에서 2n(제외)까지 루프를 돌며, 각 반복에서 현재 카운터의 i번째 비트가 설정되었는지 확인한 다음 i번째 요소를 인쇄합니다. 예시 #include<iostream> #include&l
이 튜토리얼에서는 두 개의 연속된 숫자가 같은 소수가 되지 않고 세 개의 연속된 숫자가 모두 같은 소수가 되도록 숫자를 인쇄하는 프로그램에 대해 논의할 것입니다. 여기서 우리는 정수 N이 주어질 것입니다. 우리는 109보다 작은 N 정수를 출력해야 두 개의 연속된 숫자가 같은 소수가 아니지만 3개의 연속적인 정수 쌍이 같은 소수여야 합니다. 예를 들어 정수 4가 있다고 가정해 보겠습니다. 그러면 위에서 제공된 두 조건을 모두 따르는 숫자는 6 15 35 14 예시 #include <bits/stdc++.h> using
이 튜토리얼에서는 루트에서 주어진 노드까지의 경로를 바이너리 트리로 출력하는 프로그램에 대해 논의할 것입니다. 고유한 노드가 있는 주어진 이진 트리의 경우 이진 트리의 루트 노드에서 특정 노드에 도달하기 위해 전체 경로를 인쇄해야 합니다. 이 문제를 해결하기 위해 재귀를 사용할 것입니다. 이진 트리를 탐색하는 동안 찾을 특정 요소를 재귀적으로 검색합니다. 또한 검색할 요소에 도달하는 경로도 함께 저장됩니다. 예 #include <bits/stdc++.h> using namespace std; struct Node{ &
주어진 세 좌표에서 가능한 모든 좌표를 찾아 0이 아닌 영역의 평행 사변형을 만듭니다. A, B, C가 주어진 세 점이라고 가정하면 세 가지 가능한 상황만 있을 수 있습니다. AB, AC는 측면, BC는 대각선 AB, BC는 측면, AC는 대각선 BC, AC는 측면, AB는 대각선 따라서 우리는 세 개의 좌표가 주어지면 평행 사변형을 생성할 수 있는 세 개의 좌표만 가능하다고 말할 수 있습니다. 반대쪽이 같으므로 AD =BC, AB =CD이므로 아래와 같이 누락된 점 D의 좌표를 계산합니다. - (Dx-Ax,Dy-Ay) = (
이 튜토리얼에서는 이진 트리의 루트 노드에서 주어진 이진 트리에 있는 다른 모든 노드까지의 경로를 인쇄하는 프로그램에 대해 논의할 것입니다. 이 프로그램에서 1에서 N까지 이진 트리에 있는 요소의 수를 나타내는 숫자 N이 제공됩니다. 1은 이진 트리의 루트 노드입니다. 따라서 우리의 작업은 루트 노드에서 이진 트리에 있는 다양한 다른 요소까지 가능한 모든 경로를 인쇄하는 것입니다. 이 프로그램을 풀기 위해 우리는 주어진 노드 I에 대해 왼쪽 자식은 2*i로 계산할 수 있고 오른쪽 자식은 2*i+1로 계산할 수 있다는 것을 알고
사전이라는 문자열 목록이 있다고 가정합니다. 다른 패턴 문자열이 있습니다. 우리의 임무는 패턴과 일치하는 문자열을 찾는 것입니다. 사전이 [abb, xyz, aab, kmm]이고 패턴이 stt라고 가정하면 결과는 abb 및 kmm이 됩니다. 패턴은 처음에 하나의 문자를 가지기 때문에 두 개의 동일한 문자를 가지므로 동일한 패턴 문자열을 따릅니다. 이 문제를 해결하기 위해 패턴과 일치하는 사전의 모든 단어가 인코딩 후 패턴과 동일한 해시를 갖도록 패턴을 인코딩합니다. 사전의 모든 단어를 반복하고 해시가 동일한 곳에 표시합니다. 예시
문자열에 1(0+)1과 같은 패턴이 있다고 가정합니다. 여기서 (0+)는 비어 있지 않은 연속 1을 나타냅니다. 모든 패턴을 찾아야 합니다. 패턴이 겹칠 수 있습니다. 문자열이 반드시 이진 문자열일 필요는 없습니다. 숫자와 소문자만 포함할 수 있습니다. 문자열이 1101001과 같다고 가정하면 두 가지 패턴이 있습니다. 101 및 1001. 이 문제를 해결하기 위해 다음 단계를 따르십시오 - 문자열의 모든 문자 c를 반복합니다. c가 1일 때 요소가 0이 될 때까지 반복 0의 스트림이 끝나면 다음 문자가 1인지 여
고유한 양의 정수가 있는 정렬된 배열이 있다고 가정합니다. 적분 공통비로 기하학적 진행을 형성하는 모든 삼중항을 찾아야 합니다. 배열 요소가 [1, 2, 6, 10, 18, 54]이고, 삼중항이 (2, 6, 18) 및 (6, 18, 54)라고 가정하고 이들은 기하학적 진행을 형성하고 있습니다. 이를 해결하기 위해 두 번째 요소부터 시작하여 모든 요소를 중간 요소로 고정하고 더 작은 요소와 큰 요소를 검색합니다. 중간 요소 arr[j]가 기하학적 진행의 중간이 되도록 하려면 이전 요소 arr[i] 및 arr[k]는 다음과 같습니
이 튜토리얼에서는 C++ 표준 템플릿 라이브러리를 사용하여 주어진 숫자 범위에 대해 소수를 인쇄하는 프로그램에 대해 논의할 것입니다. 여기에서 두 개의 숫자 say와 b가 주어집니다. 작업은 이 범위에서 오는 모든 소수를 인쇄하는 것입니다. 이를 위해 우리는 에라토스테네스의 체 방법을 서브루틴으로 실행하여 사용할 것입니다. 동시에 모든 소수를 벡터에 저장하고 마지막으로 모두 인쇄합니다. 예시 #include<bits/stdc++.h> using namespace std; typedef unsigned long long
여기서 우리는 배열의 모든 요소에 대해 가장 가까운 큰 값을 찾는 방법을 볼 것입니다. 요소 x에 그보다 크고 배열에도 존재하는 다음 요소가 있는 경우 해당 요소의 더 큰 값이 됩니다. 요소가 없으면 -1을 반환합니다. 배열 요소가 [10, 5, 11, 6, 20, 12]이고 더 큰 요소가 [11, 6, 12, 10, -1, 20]이라고 가정합니다. 20은 배열에서 더 큰 값이 아니므로 -1을 인쇄합니다. 이를 해결하기 위해 C++ STL의 집합을 사용합니다. 이 집합은 이진 트리 접근 방식을 사용하여 구현됩니다. 이진 트리에서
이 튜토리얼에서는 루트 노드에서 주어진 바이너리 트리의 모든 리프 노드까지의 경로를 출력하는 프로그램에 대해 논의할 것입니다. 예를 들어 다음 이진 트리가 있다고 가정해 보겠습니다. 이 바이너리 트리에는 4개의 리프 노드가 있습니다. 따라서 루트 노드에서 리프 노드까지 4개의 경로를 가질 수 있습니다. 이를 해결하기 위해 반복적 접근 방식을 사용합니다. 이진 트리의 선주문 순회를 수행하는 동안 맵에 부모 포인터를 저장할 수 있습니다. 탐색 중에 리프 노드를 만날 때마다 부모 포인터를 사용하여 루트 노드에서 경로를 쉽게 인쇄
이 튜토리얼에서는 가장 긴 commonsubstring을 출력하는 프로그램에 대해 논의할 것입니다. 이를 위해 A와 B라는 두 개의 문자열이 제공됩니다. 두 개의 입력 문자열 A와 B에 공통인 가장 긴 부분 문자열을 인쇄해야 합니다. 예를 들어 HelloWorld와 world book이 주어진다면. 그런 다음 이 경우 가장 긴 공통 부분 문자열은 world가 됩니다. 예시 #include <iostream> #include <stdlib.h> #include <string.h> using name
이 튜토리얼에서는 이진 트리에서 첫 번째로 짧은 루트에서 리프 경로를 인쇄하는 프로그램에 대해 논의할 것입니다. 여기에서 고유한 값을 가진 이진 트리가 주어지고 주어진 이진 트리에서 루트 노드에서 리프 노드까지의 최단 경로를 찾아야 합니다. 이를 해결하기 위해 큐를 사용하여 이진 트리에서 수준 순서 탐색을 수행하고 최단 경로에 노드를 저장할 수 있습니다. 이를 위해 최종 레벨의 가장 왼쪽 노드에 도달하면 대기열에서 값을 검색하고 최단 경로를 인쇄합니다. 예시 #include <bits/stdc++.h> using na
여기서 우리는 배열의 모든 요소에 대해 가장 가까운 값을 찾는 방법을 볼 것입니다. 요소 x에 그보다 크고 배열에도 존재하는 다음 요소가 있는 경우 해당 요소의 더 큰 값이 됩니다. 요소가 없으면 -1을 반환합니다. 배열 요소가 [10, 5, 11, 6, 20, 12]이고 더 큰 요소가 [11, 6, 12, 10, -1, 20]이라고 가정합니다. 20은 배열에서 더 큰 값이 아니므로 -1을 인쇄합니다. 이를 해결하기 위해 C++ STL의 집합을 사용합니다. 이 집합은 이진 트리 접근 방식을 사용하여 구현됩니다. 이진 트리에서 항상
이 튜토리얼에서는 주어진 이진 트리에서 깊이 우선 검색을 사용하여 순회 단계를 인쇄하는 프로그램에 대해 논의할 것입니다. 여기에는 역추적 절차를 포함하여 깊이 우선 검색에서 발생하는 모든 단계가 포함됩니다. DFS 동안 우리는 각 노드를 순회하고 동시에 부모 노드와 사용된 에지를 저장합니다. 순회 중에 인접 에지를 방문했다면 깊이 우선 검색의 한 단계로 정확한 노드를 인쇄할 수 있습니다. 예시 #include <bits/stdc++.h> using namespace std; const int N = 1000; vect
숫자가 주어졌다고 가정해보자. 우리는 그 수를 균등하게 나누는 수의 자릿수를 세어야 합니다. 숫자가 1012이고 결과가 3이라고 가정합니다. 1012를 균등하게 나누는 세 자리 1, 1, 2가 있습니다. 이를 해결하기 위해 모듈러스 연산을 사용하여 숫자의 각 자릿수를 찾고 숫자가 해당 자릿수로 나눌 수 있는지 여부를 확인한 다음 나눌 수 있는 경우 카운터를 늘립니다. 숫자가 0이면 해당 숫자를 무시하십시오. 예시 #include<iostream> using namespace std; int cou
여기서 우리는 숫자의 3차 루트를 구하는 방법을 볼 것입니다. 숫자가 27이라고 가정하고 이 숫자의 세제곱근은 3입니다. 이 문제를 해결하기 위해 일부 라이브러리 함수를 사용하지 않고 자체 논리를 정의합니다. 우리는 이진 검색 접근 방식을 사용할 것입니다. 이 문제를 해결하려면 다음 단계를 따라야 합니다. 임계값 =0.000001과 같은 임계값이 있다고 가정합니다. 왼쪽 값을 0으로 시작하고 오른쪽 값을 숫자로 시작 중간 계산 :=(왼쪽 + 오른쪽)/2 (숫자 – mid3)의 절대값이 임계값보다 작으면 mid를 답
이 튜토리얼에서는 주어진 바이너리 트리의 리프 노드에서 다른 리프 노드까지 존재하는 가장 긴 경로를 인쇄하는 프로그램에 대해 논의할 것입니다. 즉, Binary 트리의 지름에 나타나는 모든 노드를 인쇄해야 합니다. 여기에서 특정 이진 트리의 지름(또는 너비)은 한 끝 노드에서 다른 끝 노드까지 가장 긴 경로의 노드 수로 정의됩니다. 이를 해결하기 위해 높이 함수를 사용하여 이진 트리의 지름을 계산합니다. 그런 다음 이진 트리의 왼쪽 부분과 오른쪽 부분에서 가장 긴 경로를 찾습니다. 그런 다음 마지막으로 지름의 노드를 인쇄하기 위