⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 preschemecal.cpp

📁 穷举法进行三八二十四的计算。列举所有可能的表达式进行计算筛选。
💻 CPP
字号:
// PreSchemeCal.cpp: implementation of the CPreSchemeCal class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "RepComb.h"
#include "PreSchemeCal.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CPreSchemeCal::CPreSchemeCal()
{
 m_pScheme=NULL;
 m_nn=m_nLength=0;

}

CPreSchemeCal::~CPreSchemeCal()
{
  if(m_nLength>0)
	  delete[] m_pScheme;
}

void CPreSchemeCal::initiate(int SLength)
{
  if(SLength<1||SLength%2==0)return;
  if(SLength/2>m_nLength)
  {
	  delete[] m_pScheme;
	  m_nLength=SLength/2;
	  m_pScheme=new int[m_nLength+1];
	  m_nn=m_nLength;
  }
  else m_nn=SLength/2;
  for(int nIndex=0;nIndex<m_nn;nIndex++)
	  m_pScheme[nIndex]=nIndex;
  m_pScheme[m_nn]=2*m_nn+2;
}

bool CPreSchemeCal::next()
{
 int nIndex=m_nn-1;
 bool bFound;
 do
 {
	bFound=true;
	m_pScheme[nIndex]++;
	while(nIndex>0&&!IsSelectable(nIndex,m_pScheme[nIndex]))
	{
		if(m_pScheme[nIndex]+1==m_pScheme[nIndex+1])
		{
			nIndex--;
			m_pScheme[nIndex]++;
		}
		else m_pScheme[nIndex]++;
	}
	if(nIndex==0)  return false;
	nIndex++;
	while(nIndex<m_nn&&bFound)
	{
		m_pScheme[nIndex]=m_pScheme[nIndex-1]+1;
		while(m_pScheme[nIndex]+1<m_pScheme[nIndex+1]
			&&!IsSelectable(nIndex,m_pScheme[nIndex]))
			m_pScheme[nIndex]++;
		if(m_pScheme[nIndex]+1==m_pScheme[nIndex+1])
		{
			bFound=false;
			nIndex--;
		}
		else  nIndex++;
	}
 }while(!bFound);
 return true;
}

bool CPreSchemeCal::IsSelectable(int nIndex, int n)
{
  if(nIndex<0||nIndex>m_nn-1||n<0||n>2*m_nn) return false;
  bool bSelectable=false;
  if(m_pScheme[nIndex]+1<m_pScheme[nIndex+1])
  {
	  int cOperator,cOperand;
	  cOperator=m_nn-nIndex;
	  cOperand=((2*m_nn+1)-n)-cOperator;
	  if(cOperator+1<=cOperand)
		  bSelectable=true;
  }
  return bSelectable;
}

void CPreSchemeCal::get(int a[])
{
  int i=2*m_nn;
  while(i>=0)
	  a[i--]=0;
  for(i=0;i<m_nn;i++)
	  a[m_pScheme[i]]=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -