求解3次方程的解。第一次用Hash做题,遇到很多问题。
1.Hash表的长度开的过小,导致解决地址冲突非常耗时,最后取所有可能取值的个数为表长,通过
#include<iostream>
#include<cmath>
using namespace std;
unsigned short HashTable[25000001];
int main()
{
int a1,a2,a3,a4,a5,i,j,k,total,n=0;
cin>>a1>>a2>>a3>>a4>>a5;
for(i=-50;i<51;i++)
{
if(0!=i)
{
for(j=-50;j<51;j++)
{
if(0!=j)
{
total=(a1*i*i*i+a2*j*j*j)*(-1);
if(total<0)
total+=25000001;
HashTable[total]++;
}
}
}
}
for(i=-50;i<51;i++)
{
if(0!=i)
{
for(j=-50;j<51;j++)
{
if(0!=j)
{
for(k=-50;k<51;k++)
{
if(k!=0)
{
total=(a3*i*i*i+a4*j*j*j+a5*k*k*k);
if(total<0)
total+=25000001;
if(0!=HashTable[total])
n+=HashTable[total];
}
}
}
}
}
}
cout<<n;
return 0;
}