1인 인덱스의 수(1 – 기본 인덱싱)가 되도록 [1에서 N] 범위의 정수 순열을 찾아야 합니다. 정확히 K입니다. 따라서 N =4이고 K =3이면 출력은 [1, 2, 3, 4]가 됩니다. gcd(1, 1) =1, gcd(2, 2) =2, gcd(3, 3) =3, gcd(4, 4) =4 1인 인덱스의 수는 N – 1이 됩니다. 1을 제외한 두 개의 연속 요소를 바꾸면 해당 인덱스의 수는 정확히 2로 줄어들고 1로 바꾸면 카운트가 줄어듭니다. 정확히 1. 예시 #include<iostream> using namespace
두 개의 정수 n과 k가 있다고 가정합니다. n!이 되도록 x의 최대값을 찾아야 합니다. mod (k^x) =0. 따라서 n =5이고 k =2일 때 출력은 3이 됩니다. As n! =120, 이제 x의 다른 값에 대해 - 120 mod 2^0 =0, 120 mod 2^1 =0, 120 mod 2^2 =0, 120 mod 2^3 =0, 120 mod 2^4 =8, 120 mod 2^5 =24, 120 mod 2^6 =56, 120 mod 2^7 =120. x =3의 최대값이므로 결과는 0이므로 출력은 3입니다. 이 문제를 해결하려
하나의 세타 또는 각도 값이 있다고 가정합니다. 시침과 분침으로 각도를 생성하는 hh:mm 형식의 시간을 찾아야 합니다. 각도가 90°라고 가정하면 결과는 3:00이 될 수 있습니다. 12시간이 있는 것처럼 시간에는 12가지 가능성이 있고 분에는 60가지 가능성이 있습니다. 우리는 가능한 모든 시간을 반복할 것입니다. 임의의 시간에 대한 각도가 주어진 ta와 같으면 그 시간을 인쇄하십시오. 예시 #include<iostream> #include<cmath> using namespace std; float an
이진 트리가 있다고 가정합니다. 작업은 수직 순서 순회에서 모든 노드 합계의 최대값을 인쇄하는 것입니다. 트리가 아래와 같다면 - 수직 순서 순회는 −와 같습니다. 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 여기서 최대값은 12입니다. 접근 방식은 간단합니다. 수직 순서 순회를 수행한 다음 합계를 찾고 최대값을 확인합니다. 예시 #include<iostream> #include<map> #include<vector> #include<queue> using names
숫자 k가 있다고 가정합니다. 1 <=n <=k인 n 세트 비트가 있는 k 비트 수의 가능한 모든 조합을 찾습니다. 결과적으로 우리는 모든 비트가 설정된 숫자까지 1비트가 먼저 설정된 모든 숫자를 인쇄한 다음 2비트가 설정된 숫자를 인쇄합니다. 두 숫자의 설정 비트 수가 같으면 작은 숫자가 먼저 옵니다. 따라서 k =3이면 숫자는 [001, 010, 100, 011, 101, 110, 111]이 됩니다. 여기에서 1 <=n <=k인 n 세트 비트가 있는 k 비트 숫자의 가능한 모든 조합을 찾기 위해 동적 프로그래밍 접근 방식을 사
XY 평면에 몇 가지 점의 배열이 있다고 가정합니다. 이 점들로부터 형성할 수 있는 직사각형의 최소 면적을 찾아야 합니다. 직사각형의 측면은 X 및 Y 축과 평행해야 합니다. 직사각형을 형성할 수 없으면 0을 반환합니다. 따라서 점 배열이 [(1, 1), (1, 3), (3, 1), (3, 3), (2, 2)]와 같은 경우 . 출력은 4가 됩니다. 점 (1, 1), (1, 3), (3, 1) 및 (3, 3)을 사용하여 직사각형을 형성할 수 있기 때문입니다. 이를 해결하려면 x 좌표로 점을 주어 직선 수직선상의 점이 함께 그룹화되도
n개의 요소로 구성된 배열이 있다고 가정합니다. 이들의 평점입니다. 다음 조건에서 모든 책을 구입하는 데 필요한 최소 비용을 찾으십시오. - 각 책의 가격은 최소 1달러입니다. 평가가 인접 도서보다 높으면 도서의 비용이 인접 도서(왼쪽 또는 오른쪽)보다 높습니다. 예를 들어, 등급 배열이 [1, 3, 4, 3, 7, 1]과 같으면 출력은 10, As 1 + 2 + 3 + 1 + 2 + 1 =10 이 문제를 해결하려면 LtoR 및 RtoL이라는 두 개의 배열을 만들고 1로 채워야 합니다. 이제 다음 단계를 따르세요. - 왼쪽
n개의 숫자로 구성된 배열이 있다고 가정합니다. 배열에서 적어도 두 개의 더 큰 요소가 있는 모든 요소를 찾아야 합니다. 배열이 A =[2, 8, 7, 1, 5]와 같으면 결과는 [2, 1, 5]가 됩니다. 이를 해결하기 위해 두 번째 최대 요소를 찾은 다음 두 번째 최대 값보다 작거나 같은 모든 요소를 인쇄합니다. 예시 #include<iostream> using namespace std; void searchElements(int arr[], int n) { int first_max =
두 개의 문자열 A와 B가 있다고 가정합니다. A와 B의 길이는 동일합니다. 단일 시프트에서 문자열 B를 한 요소로 회전할 수 있습니다. A와 B에서 최대 길이의 공통 접두사를 얻으려면 최소 요구 시프트를 찾아야 합니다. 따라서 A =computerprogramming이고 B =programminglanguage인 경우 최소 시프트는 8이고 접두사는 프로그래밍입니다. B의 끝에 문자열 B를 추가하여 B =B + B라고 가정하면 각 시프트의 접두어를 별도로 찾을 필요가 없습니다. 따라서 우리는 B에 있는 A의 가장 긴 접두사를 찾아
숫자 N이 있다고 가정합니다. 1에서 N까지의 범위에서 거의 소수를 찾아야 합니다. 숫자는 정확히 두 개의 서로 다른 인수를 가질 때 거의 소수라고 합니다. 숫자는 비소인수에 제한이 없지만 2개의 소인수여야 합니다. 따라서 N이 2이면 출력은 2가 됩니다. 두 개의 숫자 6과 10이 있습니다. 여기서 우리는 에라토스테네스의 체 접근법을 사용할 것입니다. 더 나은 아이디어를 얻으려면 다음 구현을 확인하십시오. 예시 #include<iostream> #define N 100005 using namespace std; boo
n개의 요소로 구성된 배열이 있다고 가정합니다. 작업은 배열에서 요소의 최소 합을 찾는 것입니다. 적어도 하나의 요소가 해당 배열의 모든 연속 3개 요소에서 하나의 요소가 선택되도록 합니다. 따라서 배열이 [1, 2, 3, 6, 7, 1]과 같은 경우. 출력은 4입니다. 따라서 3과 1을 선택하면 (3 + 1 =4)입니다. 따라서 [1, 2, 3], [2, 3, 6], [3, 6, 7], [6, 7, 1]과 같은 연속적인 요소의 하위 배열이 있습니다. 모든 하위 배열에서 하나의 요소를 선택했습니다. sum(i)이 가능한 최소 합
N개의 정수 배열이 있다고 가정합니다. 여기서 우리는 주어진 배열의 복제본을 인쇄할 것입니다. 그러한 중복이 없으면 -1을 반환합니다. 따라서 배열이 [12, 15, 12, 3, 6, 12, 3, 48, 56, 8, 48]과 같으면 중복 항목은 [12, 3, 48] 여기서는 C++에서 순서가 지정되지 않은 맵을 사용합니다. 따라서 처음에 하나의 요소를 가져올 때 해당 요소가 지도에 있는지 여부를 확인하고, 존재하는 경우 해당 요소를 중복으로 인쇄하고, 그렇지 않으면 맵에 추가하면 됩니다. 예시 #include<iostream
n개의 요소로 구성된 배열이 있다고 가정합니다. arr[i] =x가 되도록 주어진 배열의 모든 요소를 최소값 x로 업데이트합니다. 새 배열의 모든 요소의 곱은 초기 배열의 모든 요소의 곱보다 엄격하게 큽니다. 여기서 i <=arr[i] <=10^10 및 1 <=n 4 * 2 * 1 * 10 * 6 n개 요소의 곱이 P라는 것을 알고 있기 때문에 P의 n번째 루트를 찾아야 하고 곱의 n번째 루트를 찾으려면 배열의 n개 요소의 로그의 합에서 n을 나눈 다음 안티로그의 상한선 결과가 될 것입니다. res =ceil(안티로그(lo
0에서 n-1까지의 숫자 목록이 있다고 가정합니다. 숫자는 가능한 한 많이 반복될 수 있습니다. 추가 공간을 차지하지 않고 반복되는 숫자를 찾아야 합니다. n =7의 값이고 목록이 [5, 2, 3, 5, 1, 6, 2, 3, 4, 5]와 같은 경우. 답은 5, 2, 3입니다. 이 문제를 해결하려면 다음 단계를 따라야 합니다. 목록의 각 요소 e에 대해 다음 단계를 수행하십시오. - sign :=A[e의 절대값] 부호가 양수이면 음수로 만듭니다. 그렇지 않으면 반복입니다. 예시 #include<iostream>
두 개의 배열 A와 B가 있고 배열 A에 n개의 요소가 있다고 가정합니다. 두 번째 배열 B에는 A의 모든 요소가 있지만 섞이고 하나의 요소가 제거됩니다. 누락된 요소를 찾아야 합니다. 따라서 A =[4, 8, 1, 3, 7]이고 B =[7, 4, 3, 1]이면 출력은 8입니다. 이것은 XOR 트릭을 사용하여 해결할 수 있습니다. 각 요소의 결합된 발생은 A에서 한 번, A에서 한 번만 발생하는 한 요소를 제외하고 B에서 두 번 발생합니다. x XOR x =0이라는 것을 알고 있으므로 두 요소 모두에서 XOR을 수행하면 배열. 결
N개의 양의 정수가 있는 배열과 또 다른 변수 K가 있다고 가정합니다. 두 요소 간의 차이가 k와 같도록 정확히 m개의 요소를 찾아야 합니다. 따라서 배열이 A =[4, 7, 10, 6, 9]이고 k =3이고 m =3이면 출력은 예가 됩니다. 4, 7, 10과 같은 세 가지 요소를 찾을 수 있습니다. 이를 해결하려면 요소를 k로 나눌 때 나머지를 추적해야 합니다. 이제 크기가 k인 다차원 배열 rem[][]을 만듭니다. 인덱스는 나머지를 표시하고 요소는 k로 나눌 때 해당 나머지에 따라 요소가 됩니다. 이제 나머지 집합을 탐색하여
2D 평면에 점 P가 있고 선 방정식이 있다고 가정하면 작업은 P에서 선까지 수직선의 발을 찾는 것입니다. 직선의 방정식은 ax + by + c =0입니다. 직선이 P를 지나고 직선에 수직인 방정식입니다. P와 Q를 지나는 직선의 방정식은 ay – bx + d =0이 됩니다. 또한 P(x1, y1), Q(x2, y2)도 방정식에 P의 좌표를 대입합니다. ay 1−bx 1+d=0이므로 d=bx1−ay 1 또한 Q는 주어진 선과 P와 Q를 지나는 선의 교점이므로 이 두 방정식의 해를 구합니다. ax+by+c=0,∧ay−bx+(
바이너리 문자열 bin이 있다고 가정합니다. 그런 다음 n번의 반복을 적용하고 각 반복에서 0은 01이 되고 1은 10이 되고 n번째 반복 후 문자열에서 i번째 인덱스 문자가 나옵니다. 따라서 이진 문자열이 101이고 n =2이고 i =3이면 첫 번째 반복 후에는 100110이 되고 다음 반복에서는 100101101001이 되므로 i번째 인덱스는 1을 유지합니다. 이 문제를 해결하려면 다음 단계를 따라야 합니다. 루프를 n번 실행하고 각 반복에서 문자열에 대해 다른 루프를 실행합니다. 2진 문자열의 각 문자를 변환하고 0이면
양수 k가 있다고 가정합니다. n과 n+1의 XOR이 k와 같도록 양수 n을 찾아야 합니다. 따라서 k =7(111)이면 출력은 3이 됩니다. 3(011) 및 3 + 1 =4(100)이므로 011 XOR 100 =111(7) 두 가지 가능한 경우가 있습니다. n이 짝수임을 고려하십시오. n의 마지막 비트 =0. 그런 다음 n의 마지막 비트 + 1 =1. 나머지 비트는 동일합니다. 따라서 XOR은 1이 됩니다. n이 홀수일 때 마지막 비트는 1이고 n + 1 비트의 마지막 비트는 0입니다. 그러나 이 경우에는 캐리로 인해 더 많은
대괄호가 있는 표현식이 있다고 가정합니다. 하나의 시작 괄호의 인덱스가 주어지면 그 끝 괄호를 찾아야 합니다. 따라서 표현식이 (25*6+(88-32+(50/10)+20))이고 여는 대괄호의 인덱스가 6인 경우 닫는 대괄호는 위치 23에 있습니다. 여기서는 스택 데이터 구조를 사용하여 이 문제를 해결합니다. 주어진 인덱스에서 표현식을 탐색하고 닫는 괄호를 찾으면 여는 괄호를 밀기 시작하고 스택이 비어 있을 때 스택에서 요소를 팝한 다음 인덱스를 반환합니다. 예시 #include<iostream> #include<s