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

📄 getresult.cpp

📁 这是k最大乘积问题,给与了可视化实现,很方便
💻 CPP
字号:
// getresult.cpp : implementation file
//

#include "stdafx.h"
#include "kchengji.h"
#include "getresult.h"

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

/////////////////////////////////////////////////////////////////////////////
// getresult

IMPLEMENT_DYNCREATE(getresult, CCmdTarget)

getresult::getresult()
{
/*	recTab = new double*[num];
	for(int m=0;m<num;m++)
		recTab[m] = new double[cutNum];
	
*/
for(int i=0;i<100;i++)
{
		for(int j=0;j<100;j++)
		{
			recTab[i][j] = -1;
		}

}
}
getresult::~getresult()
{
  /*   for(int p=0;p<num;p++)
	 {
		delete[] recTab[p];
	 }
	delete[] recTab;
	recTab = 0;  */
}


BEGIN_MESSAGE_MAP(getresult, CCmdTarget)
	//{{AFX_MSG_MAP(getresult)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// getresult message handlers



void getresult::set(int mtarget, int mnum, int mcutNum)
{
target=mtarget; num=mnum;cutNum=mcutNum;
}

double getresult::traceback(double target, int num, int cutNum)
{
	if(cutNum == 1){
		return target;//若被分割的段数为1,就直接返回
	}
	if(recTab[num-1][cutNum-1] != -1){
		return recTab[num-1][cutNum-1];//若表中记录不为-1,就返回该值
	}
	double processResult = 0;
	for(int i=1;i<=num-cutNum+1;i++){
		int temp = pow(10,num-i);//次方函数
		int firstInt = (int)(target/temp);//取出左边的整数
		int restTarget = fmod(target,temp);//取出余下的整数
		//对余下的数进行k-1段的划分
		int restMultiply = traceback(restTarget,num-i,cutNum-1);
	    int oneResult = firstInt*restMultiply;
		if(oneResult > processResult){
			processResult = oneResult;//当前所得最大结果
		}
	}
	recTab[num-1][cutNum-1] = processResult;//将k乘积写入备忘录
	return processResult;
}

⌨️ 快捷键说明

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