Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 位掩码函数_C++_Visual Studio 2010_Bitmask - Fatal编程技术网

C++ 位掩码函数

C++ 位掩码函数,c++,visual-studio-2010,bitmask,C++,Visual Studio 2010,Bitmask,我正在写一个程序,看看我是否能用N根长度的棍子做一个正方形。 我使用了位掩码,因为它更容易输入大的内容。出于某种原因,我的回溯代码没有返回任何内容,在这行“bitmask&(1中,您似乎从未初始化过bitmask。如果bitmask恰好为0,则您将永远不会进入循环。这似乎是问题的一部分。 还有(bitmask&(1)但是函数正确吗?出于某种原因,如果(!(bitmask&(1)但是,bitmask 0,它的初始值设定项,它应该具有零值中的所有标志,它在这里bitmask=0;maximo=sum

我正在写一个程序,看看我是否能用N根长度的棍子做一个正方形。
我使用了位掩码,因为它更容易输入大的内容。出于某种原因,我的回溯代码没有返回任何内容,在这行“bitmask&(1中,您似乎从未初始化过bitmask。如果bitmask恰好为0,则您将永远不会进入循环。这似乎是问题的一部分。

还有
(bitmask&(1)但是函数正确吗?出于某种原因,如果(!(bitmask&(1)但是,bitmask 0,它的初始值设定项,它应该具有零值中的所有标志,它在这里bitmask=0;maximo=suma/4;analiza(0,0);当我将它初始化的函数调用为0时,问题是,我将它标记为0,但它仍然进入。
// 10364 - Square.cpp: archivo de proyecto principal.
#include "stdafx.h"
#include <stdio.h>
#include <vector>

using namespace std;

vector<int> vec;
int bitmask,casos,palitos,suma,maximo;
bool analiza(int analizado,int lados)// lados =cantidad lados analizados, contador
{
    if (analizado==maximo)
    {
        analizado=0;
        lados++;
    }
    if(lados==4)
    {
        printf("yes\n");
        return true;
    }

        for (int i=0;i<palitos;i++)
        {
            if (!(bitmask & (1 << i)))
            {
                if (analizado+vec[i]<=maximo)
                {
                    bitmask | (1 << i);
                    if(analiza(analizado+1,lados))
                        return true;
                    bitmask & ~(1 << i);

                }
            }

        }
        return false;
        //prender: bitmask | (1 << indice)
        //apagar: bitmask & ~(1 << indice)
        /*comparar: bitmask & (1 << indice)*/
}
int main()
{
    freopen("in.txt","rt",stdin);
    freopen("out.txt","wt",stdout);

    scanf("%d\n",&casos);
    for(int i=0;i<casos;i++)
    {
        scanf("%d",&palitos);
        vec.clear();
        vec.resize(palitos);
        suma=0;
        for(int j=0;j<palitos;j++)
        {
            scanf("%d",&vec[j]);
            suma+=vec[j];
        }
        if(suma%4!=0)
            printf("no\n");
        else{
            bitmask=0;
            maximo=suma/4;
            analiza(0,0);
            }


    }


    return 0;
}