두 개의 원(중심점과 반지름 값)이 있다고 가정하고 한 원이 다른 원 안에 맞는지 확인해야 합니다. 세 가지 가능한 원인이 있습니다. 작은 원은 서로 닿지 않고 큰 원 안에 완전히 있습니다. 이 경우 중심 사이의 거리와 작은 반지름의 합은 큰 반지름보다 작습니다. 따라서 더 작은 것이 더 큰 것 안에 있을 것입니다. 두 번째 경우는 작은 원이 큰 원 안에 있지만 큰 원의 둘레에도 닿는 경우입니다. 세 번째 경우는 작은 원의 일부가 큰 원 안에 있는 경우입니다. 이를 해결하려면 두 중심 사이의 거리를 찾은 다음
n개의 요소가 있는 배열 A가 있습니다. 배열이 쌍으로 정렬되었는지 여부를 확인해야 합니다. 배열이 {8, 10, 18, 20, 5, 15}와 같다고 가정합니다. 이것은 (8, 10), (18, 20), (5, 15)가 정렬되어 쌍으로 정렬됩니다. 배열에 홀수개의 요소가 있으면 마지막 요소는 무시됩니다. 접근 방식은 너무 간단합니다. I를 0에서 n-1로 가져와 i번째 요소가 i+1번째 요소보다 작은지 여부를 확인하고 그렇지 않은 경우 false를 반환하고 그렇지 않으면 I를 2만큼 증가시킵니다. 예시 #include <io
여기에서 행렬이 희소인지 여부를 확인하는 방법을 살펴보겠습니다. 희소 행렬은 대부분의 요소가 0인 행렬입니다. 희소 행렬의 정의는 요소의 2/3가 0이면 희소 행렬로 표시됩니다. 다음은 희소 행렬의 예입니다. 이를 확인하기 위해 행렬의 0 개수를 세고 해당 개수가 전체 요소의 2/3보다 크면 희소입니다. 예 #include <iostream> #include <cmath> #define MAX 5 using namespace std; bool isSparseMatrix(int arr[][MAX], int
이 섹션에서는 숫자가 희소인지 여부를 확인하는 방법을 살펴보겠습니다. 숫자의 이진 표현에 2개 또는 2개 이상의 연속 1이 있는 경우 숫자는 희소하다고 합니다. 숫자가 72와 같다고 가정합니다. 이것은 01001000입니다. 여기에는 2개 이상의 연속 1이 없습니다. 숫자가 희박한지 확인하기 위해 숫자를 n으로 취한 다음 해당 숫자를 오른쪽으로 1비트 이동하고 비트 단위 AND를 수행합니다. 결과가 0이면 희소 숫자이고 그렇지 않으면 그렇지 않습니다. 예 #include <iostream> using namespace
여기서 우리는 하나의 문자열이 특정 회전 후 회문임을 알 수 있습니다. 회문은 양방향으로 동일한 문자열입니다. 문자열 회전은 AAAAD와 같은 경우 회문입니다. 이것은 직접 회문은 아니지만 회전 AADAA는 회문입니다. 문자열이 회문(palindrome)이 회전되었는지 확인하려면 처음에 이것이 회문인지 여부를 확인한 다음 한 문자만큼 회전한 다음 다시 확인합니다. 이 확인은 n 시간 동안 수행됩니다. 여기서 n 문자 수입니다. 예시 #include <iostream> #include <string> #incl
숫자가 있다고 가정해 보겠습니다. 우리는 이것을 두 개의 풍부한 숫자의 합으로 표현해야 합니다. 그렇다면 숫자를 인쇄하고, 그렇지 않으면 -1을 인쇄하십시오. 숫자는 숫자라고 합니다. 풍부한 숫자는 숫자의 모든 고유 약수의 합이며 sum(n)으로 표시되는 숫자는 숫자의 값보다 큽니다. 이를 해결하기 위해 모든 풍부한 수를 집합에 저장하고 주어진 수 n에 대해 i =1에서 n에 대한 루프를 실행하고 n과 (n – i)가 풍부한지 확인합니다. 예시 #include <iostream> #include <set> #
정수 n이 있다고 가정합시다. 문제는 이 정수가 이진법에 상응하는 대체 패턴을 가지고 있는지 여부를 확인하는 것입니다. 대체 패턴은 101010…을 의미합니다. 접근 방식은 다음과 같습니다. 이진수 등가를 사용하여 각 숫자를 확인하고 연속되는 두 숫자가 같으면 false를 반환하고 그렇지 않으면 true를 반환합니다. 예시 #include <iostream> using namespace std; bool hasAlternatePattern(unsigned int n) { int previous =
정수 n이 있다고 가정합시다. 문제는 이 정수가 이진법에 상응하는 대체 패턴을 가지고 있는지 여부를 확인하는 것입니다. 대체 패턴은 101010…을 의미합니다. 1)을 계산합니다. 이제 num의 모든 비트가 1이면 num에 교대 패턴이 있습니다. 예시 #include <iostream> #include <algorithm> using namespace std; bool isAllBitSet(int n){ if (((n + 1) & n) == 0) &nbs
여기서 우리는 번호가 Krishnamurty 번호인지 확인하는 방법을 볼 것입니다. 각 숫자의 계승의 합이 숫자와 같으면 숫자는 크리슈나무르티 수입니다. 예를 들어 숫자가 145이면 합계 =1입니다! + 4! + 5! =1 + 24 + 120 =145. 이것은 Krishnamurty 수입니다. 논리는 간단합니다. 각 숫자의 계승을 찾고 합을 찾은 다음 주어진 숫자와 같으면 그 숫자는 Krishnamurty 숫자입니다. 더 나은 아이디어를 얻기 위해 코드를 살펴보겠습니다. 예시 #include <iostream> #inc
여기서 우리는 숫자가 23으로 나누어 떨어지는지 여부를 확인할 수 있는 하나의 프로그램을 볼 것입니다. 숫자 1191216이 주어졌다고 가정합니다. 이것은 23으로 나눌 수 있습니다. 나눗셈을 확인하려면 다음 규칙을 따라야 합니다. 매번 숫자/잘린 숫자의 마지막 자릿수 추출 잘린 숫자에 7 *(이전에 계산된 숫자의 마지막 숫자)를 추가합니다. 필요한 만큼 이 단계를 반복합니다. 17043, so 1704 + 7*3 = 1725 1725, so 172 + 7 * 5 = 207 207, this is 9 * 23
여기서 우리는 숫자가 41로 나누어 떨어지는지 여부를 확인할 수 있는 하나의 프로그램을 볼 것입니다. 숫자 104413920565933이 주어졌다고 가정합니다. 이것은 41로 나눌 수 있습니다. 나눗셈을 확인하려면 다음 규칙을 따라야 합니다. 매번 숫자/잘린 숫자의 마지막 자릿수 추출 잘린 숫자에 4 *(이전에 계산된 숫자의 마지막 숫자)를 뺍니다. 필요한 만큼 이 단계를 반복합니다. 30873, so 3087 - 4*3 = 3075 3075, so 307 - 4 * 5 = 287 287, so 28 &nda
여기서 우리는 문자열 또는 숫자가 1, 14 또는 144의 연결인지 여부를 알 수 있는 한 가지 문제를 볼 것입니다. 문자열이 111411441이라고 가정하면 이것은 유효하지만 144414는 유효하지 않습니다. 작업은 간단합니다. 마지막에서 한 자리, 두 자리 및 세 자리 숫자를 가져와서 이 세 가지(1, 14 및 144) 중 하나와 일치하는지 확인해야 합니다. 일치하는 항목이 하나 있으면 나누기 번호를 입력하고 전체 번호가 소진되지 않을 때까지 이 과정을 반복합니다. 예시 #include <iostream> #incl
배열 A와 또 다른 정수 K가 있다고 가정합니다. K의 두 배수 사이에 있는 요소를 정렬해야 합니다. A가 [2, 13, 3, 1, 21, 7, 8, 13, 12와 같다고 가정합니다. ] 및 K =2. 출력은 [2, 1, 3, 7, 13, 21, 8, 13, 12]입니다. 여기서 2의 배수는 2, 8, 12이고, 2와 8 사이의 요소는 13, 3, 1, 21, 7이며, 1, 3, 7, 13, 21, 8과 12 사이의 요소는 1, 3, 7, 13, 21로 정렬됩니다. 13이므로 이미 정렬되어 있습니다. 배열을 탐색하고 값 K의 배수
문자열 배열이 있고 참조용으로 다른 문자열이 있다고 가정합니다. 참조 문자열을 가져와 참조 문자열의 문자 순서를 사용하여 문자열 배열을 정렬해야 합니다. 여기에서는 배열의 문자열을 고려하고 있으며 참조 문자열은 소문자입니다. 문자열 배열이 [hello, programming, science, computer, india]와 같다고 가정하고, 참조 문자열은 pigvxbskyhqzelutoacfjrndmw와 같다고 가정합니다. 정렬 후 출력 문자열은 [programming , 인도, 과학, 안녕하세요, 컴퓨터] 작업은 간단합니다.
두 개의 서로 다른 배열이 있다고 가정합니다. C++ STL 쌍 클래스를 사용하여 다른 배열을 기반으로 한 배열을 정렬해야 합니다. 두 개의 배열이 A1 =[2, 1, 5, 4, 9, 3, 6, 7, 10, 8]이고 다른 배열이 A2 =[A, B, C, D, E, F, G와 같다고 가정합니다. , H, I, J], 출력은 다음과 같습니다. A1 =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], A2 =[B, A, F, D, C , G, H, J, E, I] 여기서 우리는 C++ STL 쌍을 사용하고 있습니다. 쌍은 A1
완전한 그래프가 있다고 가정합니다. Edge Disjoint Spanning tree의 수를 계산해야 합니다. Edge Disjoint Spanning 트리는 스패닝 트리로, 세트의 두 트리가 공통 에지를 갖지 않습니다. N(꼭짓점의 수)이 4라고 가정하면 출력은 2가 됩니다. 4개의 꼭짓점을 사용하는 완전한 그래프는 아래와 같습니다 - 두 개의 가장자리 분리 스패닝 트리는 다음과 같습니다. - N개의 정점이 있는 완전한 그래프에서 간선 분리 스패닝 트리의 최대 수는 $[\frac{n}{2}]$입니다. 예시 #includ
양수 값과 음수 값이 있는 데이터 목록이 하나 있다고 가정합니다. 합이 가장 큰 인접 부분배열의 합을 찾아야 합니다. 목록에 {-2, -5, 6, -2, -3, 1, 5, -6}이 포함되어 있다고 가정하고 최대 하위 배열의 합은 7입니다. {6, -2, -3의 합입니다. , 1, 5} Divide and Conquer 방법을 사용하여 이 문제를 해결할 것입니다. 단계는 아래와 같습니다 - 단계 - 배열을 두 부분으로 나누기 다음 세 개 중 최대값 찾기 왼쪽 부분배열의 최대 부분배열 합계 오른쪽 부분배열의 최대 부분배열 합계 하
크기가 n인 배열이 있다고 가정하고 카운팅 정렬 기술을 사용하여 중앙값과 모드를 찾아야 합니다. 이 기술은 배열 요소가 제한된 범위에 있을 때 유용합니다. 요소가 {1, 1, 1, 2, 7, 1}이고 모드가 1이고 중앙값이 1.5라고 가정합니다. 중앙값이 무엇이며 모드가 무엇인지 봅시다 - 중앙값은 정렬된 숫자 목록의 중간 숫자입니다. 모드는 목록에서 가장 많이 발생하는 요소입니다. 중앙값과 모드를 얻으려면 다음 단계를 따라야 합니다. 입력 배열의 크기가 n이라고 가정 이전 개수를 다음 인덱스로 합산하기 전에 개수 배열을
문자열이 있다고 가정합니다. 특정 문자의 모든 발생을 제거한 후 문자열에 대한 각 문자의 ASCII 값 합계를 최소화해야 합니다. 문자열이 hello와 같이 주어졌다고 가정하면 ASCII 문자의 합은 (104 + 101 + 108 + 108 + 111) =532입니다. 이제 각 문자의 발생을 확인하십시오. h는 한 번 발생했으므로 비용은 1 * 104 =104입니다. e는 한 번 발생했으므로 비용은 1 * 101 =101입니다. 나는 한 번 발생했으므로 비용은 2 * 108 =216입니다. o가 한 번 발생했으므로 비용은 1 *
두 개의 숫자 문자열 A와 B가 있다고 가정합니다. A와 B를 동일하게 만드는 최소 비용을 찾아야 합니다. 우리는 단 하나의 작업만 수행할 수 있습니다. 즉, 문자열에서 숫자를 삭제할 수 있습니다. 숫자에서 숫자를 삭제하는 비용은 숫자 값과 동일합니다. 문자열 A =6789, B =7859라고 가정하면 A에서 6을 삭제하고 B에서 5를 삭제해야 하므로 비용은 5 + 6 =11이 됩니다. 이것은 Longest Common Subsequence 문제의 변형 중 하나입니다. A와 B에서 LCS의 길이를 구해야 하며, 이 공식을 사용하여