检查C ++数组中大小为k的每个段中是否存在键
概念
对于具有数组N的给定数组arr1[],另一个键X和段大小K,任务是确定键X存在于arr1[]中大小为K的每个段中。
输入项
arr1[] = { 4, 6, 3, 5, 10, 4, 2, 8, 4, 12, 13, 4}
X = 4
K = 3输出结果
Yes
数组中有4个大小为K的非重叠段,分别为{4,6,3},{5,10,4},{2,8,4}和{12,13,4}。所有段均显示4。
输入项
arr1[] = { 22, 24, 57, 66, 35, 55, 77, 33, 24, 46, 22, 24, 26}
X = 24
K = 5输出结果
Yes
输入项
arr1[] = { 6, 9, 8, 13, 15, 4, 10}
X = 9
K = 2输出结果
No
方法
在这种情况下,概念很简单,我们考虑大小为K的每个段,并验证窗口中是否存在X。因此,我们需要仔细解决最后一部分。
示例
以下是上述方法的实现-
// C++ code to determine the every segment size of
//数组具有搜索键x-
#include <bits/stdc++.h>
using namespace std;
bool findxinkindowSize1(int arr1[], int X, int K, int N){
int i;
for (i = 0; i < N; i = i + K) {
//在段开头搜索X-
//从索引i。
int j;
for (j = 0; j < K; j++)
if (arr1[i + j] == X)
break;
//如果循环没有中断
if (j == K)
return false;
}
//如果N是K的倍数
if (i == N)
return true;
//检查最后一个段是否为N-
//不是K的倍数。-
int j;
for (j=i-K; j<N; j++)
if (arr1[j] == X)
break;
if (j == N)
return false;
return true;
}
//主驱动程序
int main(){
int arr1[] = { 4, 6, 3, 5, 10, 4, 2, 8, 4, 12, 13, 4 };
int X = 4, K = 3;
int N = sizeof(arr1) / sizeof(arr1[0]);
if (findxinkindowSize1(arr1, X, K, N))
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}输出结果
Yes