c++ - 以下问题的蛮力技术

标签 c++

给定一个整数 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/

相关文章:

c++ - For循环,检查相同的对

SIGINT 上的 C++ 程序内存泄漏

c++ - 如何将来自多个翻译单元的多个 const 对象放置在一个内存块中?

c++ - 清除屏幕上的特定位置

c# - 在 Windows 中如何从 USB HID 设备获取原始描述符数据?

c++ - 为什么在服务器和客户端的 sin_port 中指定相同的端口?

c++ - 引用这些指针时我是如何不小心覆盖的?

c++ - 线程池(大概)锁定条件变量和互斥量的问题

c++ - 向后搜索时 libvlc_media_player_set_position 失败

c++ - 使用 QOpenGLFramebufferObject 时深度测试不起作用