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

📄 cproc.cpp

📁 该文件利用算法模拟人工猜数字的过程
💻 CPP
字号:
#include <iostream>
#include "Cproc.h"

using namespace std;

Cproc::Cproc(void)
{
	_step = 0;
	for(int i=0;i<9;i++)
		_yu.push_back((char)i+'1');
	_yu.push_back('0');
	x90 = true;
}

char* Cproc::select(void)
{
	vector<char>::iterator pos = _yu.begin();
	list<res>::iterator end = _l.end();
	int help = 0;
	int ski = 0;
	switch(_step)
	{
	case 0:												//试探1234
		for(int i=0;i<4;i++)
			_temp.di[i] = *(pos + _step * 4 + i);
		_step++;
		break;

	case 1:
		end--;
		help = end->cl[2];
		switch(help)
		{
		case 0:											//无1234
			for(int i=0;i<4;i++)
				_temp.di[i] = *(pos + _step * 4 + i);
			_step = 15;
			break;
		case 1:											//试探5678
		case 2:
			for(int i=0;i<4;i++)
				_temp.di[i] = *(pos + _step * 4 + i);
			_step++;
			break;
		case 3:
			for(int i=0;i<4;i++)
				_temp.di[i] = *(pos + _step * 4 + i);
			_step = 14;
			break;
		case 4:											//一阶段完成
			_temp.di[0] = 0;
			break;
		default:
			break;
		}
		break;

	case 2:
		end--;
		help = end->cl[2] + (--end)->cl[2];
		switch(help)
		{
		case 2:											//确定90
			_temp.di[0] = *(pos + 8);
			_temp.di[1] = *(pos + 9);
			_temp.di[2] = *(pos + 0);
			_temp.di[3] = *(pos + 1);
			_step = 11;
			break;
		case 3:											//郁闷情况
			help = end->cl[2];
			if(help==2)
			{
				_swap(pos + 0,pos + 4);
				_swap(pos + 1,pos + 5);
				_swap(pos + 2,pos + 6);
				_swap(pos + 3,pos + 7);
			}
			_temp.di[0] = *(pos + 8);
			_temp.di[1] = *(pos + 9);
			_temp.di[2] = *(pos + 0);
			_temp.di[3] = *(pos + 1);
			_step = 3;
			break;
		case 4:											//确定非90
			help = end->cl[2];
			x90 = false;
			switch(help)
			{
			case 1:
				_swap(pos + 0,pos + 4);
				_swap(pos + 1,pos + 5);
				_swap(pos + 2,pos + 6);
				_swap(pos + 3,pos + 7);
				_temp.di[0] = *(pos + 8);
				_temp.di[1] = *(pos + 9);
				_temp.di[2] = *(pos + 0);
				_temp.di[3] = *(pos + 1);
				_step = 11;
				break;
			case 2:
				_temp.di[0] = *(pos + 8);
				_temp.di[1] = *(pos + 9);
				_temp.di[2] = *(pos + 0);
				_temp.di[3] = *(pos + 1);
				_step = 3;
			break;
			default:
				break;
			}
			break;
		default:
			break;
		}
		break;

	case 3:												//确定前八
		end--;
		help = end->cl[2];
		switch(help)
		{
		case 1:
			if(x90)
			{
				_swap(pos + 0,pos + 8);
				_swap(pos + 1,pos + 9);
			}
			_swap(pos + 0,pos + 2);
			break;
		case 2:
			if(x90)
			{
				_swap(pos + 2,pos + 8);
				_swap(pos + 3,pos + 9);
			}
			_swap(pos + 0,pos + 2);
			break;
		default:
			break;
		}
		_step++;
	case 4:
		_temp.di[0] = *(pos + 8);
		_temp.di[1] = *(pos + 9);
		_temp.di[2] = *(pos + 0);
		_temp.di[3] = *(pos + 1);
		_step++;
		break;

	case 5:
		end--;
		help = end->cl[2];
		switch(help)
		{
		case 0:
			_swap(pos + 0,pos + 2);
			_swap(pos + 1,pos + 3);
			_step++;
			break;
		case 1:
			_swap(pos + 0,pos + 3);
			_step++;
			break;
		case 2:
			_step++;
			break;
		default:
			break;
		}
	case 6:
		_temp.di[0] = *(pos + 0);
		_temp.di[1] = *(pos + 1);
		_temp.di[2] = *(pos + 4);
		_temp.di[3] = *(pos + 5);
		_step++;
		break;

	case 7:												//测试5678
		end--;
		help = end->cl[2];
		switch(help)
		{
		case 0:
			_swap(pos + 0,pos + 6);
			_swap(pos + 1,pos + 7);
			_temp.di[0] = 0;
			break;
		case 1:
			_swap(pos + 0,pos + 2);
			_swap(pos + 1,pos + 3);
			_swap(pos + 5,pos + 6);
			_temp.di[2] = *(pos + 4);
			_temp.di[3] = *(pos + 5);
			_temp.di[0] = *(pos + 0);
			_temp.di[1] = *(pos + 1);
			_step++;
			break;
		case 2:
			_swap(pos + 4,pos + 6);
			_swap(pos + 5,pos + 7);
			_temp.di[2] = *(pos + 4);
			_temp.di[3] = *(pos + 5);
			_temp.di[0] = *(pos + 0);
			_temp.di[1] = *(pos + 1);
			_step = 10;
			break;
		case 3:
			_swap(pos + 5,pos + 6);
			_temp.di[2] = *(pos + 4);
			_temp.di[3] = *(pos + 5);
			_temp.di[0] = *(pos + 0);
			_temp.di[1] = *(pos + 1);
			_step++;
			break;
		case 4:
			_swap(pos + 2,pos + 4);
			_swap(pos + 3,pos + 5);
			_temp.di[0] = 0;
			break;
		default:
			break;
		}
		break;

	case 8:
		end--;
		help = end->cl[2];
		switch(help)
		{
		case 2:	
			_swap(pos + 6,pos + 2);
			_swap(pos + 7,pos + 3);
			_temp.di[0] = 0;
			break;
		case 3:
			_swap(pos + 4,pos + 6);
			_temp.di[0] = *(pos + 4);
			_temp.di[1] = *(pos + 5);
			_temp.di[2] = *(pos + 1);
			_temp.di[3] = *(pos + 0);
			_step = 9;
			break;
		case 4:
			_swap(pos + 4,pos + 2);
			_swap(pos + 5,pos + 3);
			_temp.di[0] = 0;
		default:
			break;
		}
		break;
	case 9:
		end--;
		help = end->cl[2];
		switch(help)
		{
		case 2:	
			_swap(pos + 6,pos + 2);
			_swap(pos + 7,pos + 3);
			_temp.di[0] = 0;
			break;
		case 4:
			_swap(pos + 4,pos + 2);
			_swap(pos + 5,pos + 3);
			_temp.di[0] = 0;
		default:
			break;
		}
		break;
	case 10:
		end--;
		help = end->cl[2];
		switch(help)
		{
		case 0:	
			_swap(pos + 6,pos + 0);
			_swap(pos + 7,pos + 1);
			_temp.di[0] = 0;
			break;
		case 4:
			_swap(pos + 4,pos + 2);
			_swap(pos + 5,pos + 3);
			_temp.di[0] = 0;
		default:
			break;
		}
		break;

	case 11:
		end--;
		help = end->cl[2];
		switch(help)
		{
		case 1:
			if(!x90)
			{
				_swap(pos + 2,pos + 8);
				_swap(pos + 3,pos + 9);
			}
			break;
		case 2:
			if(!x90)
			{
				_swap(pos + 0,pos + 8);
				_swap(pos + 1,pos + 9);
			}
			_swap(pos + 0,pos + 2);
			_swap(pos + 1,pos + 3);
			break;
		default:
			break;
		}
		_temp.di[0] = *(pos + 4);
		_temp.di[1] = *(pos + 5);
		_temp.di[2] = *(pos + 8);
		_temp.di[3] = *(pos + 9);
		_step++;
		break;

	case 12:
		end--;
		help = end->cl[2];
		if(help==3)
		{
			_swap(pos + 4,pos + 2);
			_swap(pos + 5,pos + 3);
		}
		else
		{
			_swap(pos + 6,pos + 2);
			_swap(pos + 7,pos + 3);
		}
		_swap(pos + 1,pos + 2);
		_temp.di[0] = *(pos + 0);
		_temp.di[1] = *(pos + 8);
		_temp.di[2] = *(pos + 9);
		_temp.di[3] = *(pos + 1);
		_step++;
		break;
	case 13:
		end--;
		help = end->cl[2];
		switch(help)
		{
		case 2:
			_swap(pos + 8,pos + 0);
			_swap(pos + 9,pos + 1);
			_temp.di[0] = 0;
			break;
		case 3:
			_swap(pos + 1,pos + 3);
			_temp.di[0] = *(pos + 8);
			_temp.di[1] = *(pos + 9);
			_temp.di[2] = *(pos + 0);
			_temp.di[3] = *(pos + 1);
			break;
		case 4:
			_swap(pos + 8,pos + 2);
			_swap(pos + 9,pos + 3);
			_temp.di[0] = 0;
			break;
		default:
			break;
		}
		break;

	case 14:
		end--;
		help = end->cl[2];
		if(!help)
		{
			_swap(pos + 8,pos + 4);
			_swap(pos + 9,pos + 5);
		}
		x90 = false;
		_temp.di[0] = *(pos + 8);
		_temp.di[1] = *(pos + 9);
		_temp.di[2] = *(pos + 0);
		_temp.di[3] = *(pos + 1);
		_step = 11;
		break;

	case 15:
		end--;
		help = end->cl[2];
		switch(help)
		{
		case 2:
			_swap(pos + 0,pos + 4);
			_swap(pos + 1,pos + 5);
			_swap(pos + 2,pos + 6);
			_swap(pos + 3,pos + 7);
			_temp.di[0] = *(pos + 8);
			_temp.di[1] = *(pos + 9);
			_temp.di[2] = *(pos + 0);
			_temp.di[3] = *(pos + 1);
			_step = 11;
			break;
		case 3:
			_swap(pos + 0,pos + 4);
			_swap(pos + 1,pos + 5);
			_swap(pos + 2,pos + 6);
			_swap(pos + 3,pos + 7);
			_swap(pos + 8,pos + 4);
			_swap(pos + 9,pos + 5);
			x90 = false;
			_temp.di[0] = *(pos + 8);
			_temp.di[1] = *(pos + 9);
			_temp.di[2] = *(pos + 0);
			_temp.di[3] = *(pos + 1);
			_step = 11;
			break;
		case 4:
			_swap(pos + 0,pos + 4);
			_swap(pos + 1,pos + 5);
			_swap(pos + 2,pos + 6);
			_swap(pos + 3,pos + 7);
			_temp.di[0] = 0;
			break;
		default:
			break;
		}
		break;

	default:
		_temp.di[0] = 0;
		break;
	}
	return _temp.di;
}

void Cproc::get(int a[])
{
	for(int i=0;i<3;i++)
		_temp.cl[i]=a[i];
	_l.push_back(_temp);
}

void Cproc::_swap(vector<char>::iterator a,vector<char>::iterator b)
{
	char tem;
	tem = *a;
	*a = *b;
	*b = tem;
}


Cproc::~Cproc(void)
{
}

⌨️ 快捷键说明

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