暴力破解技术解决以下问题

brute force technique for the following problem

本文关键字:问题 解决 技术 破解      更新时间:2023-10-16

给定一个整数A,表示队列中站立的人数。 选择过程遵循一个规则,即选择站在偶数位置的人。在选定的人员中,形成一个队列,再次从这些人员中仅选择偶数位置的人。 这种情况一直持续到我们只剩下一个人。查找并返回该人员在原始队列中的位置。

#include <bits/stdc++.h>
using namespace std;
int main()
{
int A=10,p=0,i;
vector<bool> mark(A+1,true);
mark[0]=false;
for(i=0;i<=A;i=i+2)
{
p++;
if(p==2)
{
mark[i]=false;
p=0;
}
}
for(int j=0;j<A;j++)
{
cout<<mark[j];
}
for(i=0;i<A;i++)
{
if(mark[i]==true)
{
cout<<i<<endl;
}
}
}

我试过这个,但它仅适用于第一组偶数 PS:我是新来的,如果我问错了,请原谅我

如果您对与您类似的简单算法感兴趣,那么请参阅以下示例:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
int A = 10, currentSize = A;
vector<bool> mark(A, true);
while (currentSize > 1) {
for (int i = 0, j = 1; i < A; i++) {
if (mark[i]) {
if (j % 2 != 0) {
mark[i] = false;
currentSize--;
}
j++;
}
}
}
for (int i = 0; i < A; i++) {
if (mark[i]) {
cout << i + 1 << endl;
break;
}
}
return 0;
}

如果您只需要使用更快的算法来回答问题,那么我认为这将是正确的:

#include <iostream>
using namespace std;
int main()
{
int A = 10, p = 0;
while (A / 2 != 0) {
A /= 2;
p++;
}
cout << pow(2, p);
return 0;
}

我使用 VS2017 编译此代码。