Chinaunix首页 | 论坛 | 博客
  • 博客访问: 588250
  • 博文数量: 752
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(752)

文章存档

2011年(1)

2008年(751)

我的朋友

分类:

2008-10-13 16:53:39

frkstyc:不妨考虑先枚举进位的情况,然后构造方程组,在这个基础上进行局部搜索,时间应该会好些吧
(发表于2006-1-11 21:28:00)

txqc4:To frkstyc:能否再说得详细些不?
(发表于2006-1-13 21:52:00)

兔狸熊:
#pragma warning(disable:4768)
#pragma warning(disable:4786)
#pragma warning(disable:4503)

#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
typedef map > MapVector;
class SecretSum
{
public:
SecretSum();
~SecretSum();
int countPossible(string num1,string num2,string result);
private:
void Init();
void BuildMap(string str);
void Display();
string GetTypeNumber(string str);
private:
MapVector m_MapVector;
bool m_nSign[999][999];
};

SecretSum::SecretSum()
{
Init();
}

SecretSum::~SecretSum()
{
}
(发表于2006-1-26 14:48:00)

兔狸熊:void SecretSum::Display()
{
fstream file;
file.open("result.txt");
ostream oSave = cout;
cout = file;
MapVector::iterator iter = m_MapVector.begin();
cout<<"total count:"< vector vString;
vector::iterator it ;
for (;iter !=m_MapVector.end(); iter++ )
{
vString = (*iter).second;
cout<<"\t\t"<<(*iter).first<<" type's count:"< for (it = vString.begin();it!=vString.end();it++)
{
cout<<"\t\t\t"<<(*it)< }
}
file.close();
  cout = oSave;

}
void SecretSum::Init()
{
memset(m_nSign,0,999*999);
int sum = 0;
for (int i = 100; i <= 899; i++)

for (int j = 100; j <= 999-i; j++)
{
if (m_nSign[i][j])
continue;
stringstream stm;
stm< m_nSign[i][j] = 1;
BuildMap(stm.str());
if (i {
stringstream stm1;
stm1< BuildMap(stm1.str());
m_nSign[j][i] = 1;
}


}
}
// Display();
}

(发表于2006-1-26 14:49:00)

兔狸熊:string SecretSum::GetTypeNumber(string str)
{
string strTemp,strSave("AAAAAAAAA");
char ch = 'B';
char chTemp;
int nPos = 0;
for (int i = 1 ; i < str.length(); i++)
{
if ((nPos = str.substr(0,i).find_last_of(str[i],i)) != -1)
{
chTemp = strSave[nPos];
strSave[i] = chTemp;
}
else
{
strSave[i] = ch;
ch++;
}
}
return strSave;
}

(发表于2006-1-26 14:50:00)

兔狸熊:int SecretSum::countPossible(string num1,string num2,string result)
{
string str= num1 + num2 + result;
int nReturn = 0;
string strNumber = GetTypeNumber(str);
MapVector::iterator iterMapVector = m_MapVector.find(strNumber);
if (iterMapVector != m_MapVector.end())
{
vector vectorString = (*iterMapVector).second;
vector::iterator iterString = vectorString.begin();
nReturn = vectorString.size();
cout< for (; iterString != vectorString.end() ; iterString++)
{
cout<<"\t"<<*iterString< }
}
if (nReturn == 0)
cout<<"result is : 0"< return nReturn;

}
void SecretSum::BuildMap(string str)
{
m_MapVector[GetTypeNumber(str)].push_back(str);

}

(发表于2006-1-26 14:50:00)

兔狸熊:void SecretSum::BuildMap(string str)
{
m_MapVector[GetTypeNumber(str)].push_back(str);

}

void main( int argc, char ** argv )
{
SecretSum test;
string strNumber1,strNumber2,strResult;
while (true)
{
cout<<"请输入number1(X为退出):"< cin>>strNumber1;
if (strNumber1 == "X")
break;
cout<<"请输入number2:"< cin>>strNumber2;
cout<<"请输入result:"< cin>>strResult;
test.countPossible(strNumber1 ,strNumber2,strResult);
}
system("pause");
}




(发表于2006-1-26 14:51:00)

..........................................................................
--------------------next---------------------

阅读(294) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~