给定一个整数 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 来编译这段代码。
关于c++ - 以下问题的蛮力技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62369287/