主题:难题!你感兴趣吗?请进。
你好!
我这里有一个问题,想了一天多也找不也好的解决方法,如果你有好的方法,请告诉我好吗?在下不胜感激。
问题是这样的:
有n个整数,(1 <= n <= 1000 ),它们的值的范围是-536870912到+536870911(很大吧,呵) ,现在给一个数m,判断m是否是这n个数中的某三个数的和。
我写了关于这个问题的函数,可惜,速度不够快,其体如下:
/***************************************************************************
*函数原型:int compare(long *p, int n, long N)
*函数功能:p指向从小到大的有序数组,n为该数组的个数,查找p指向的数组中是否有
* 三个元素的和为N
*返回值: 若存在则返回 1,否则返回 0;
****************************************************************************/
int compare(long *p, int n, long N)
{
int i = 0;
int j = 0;
int k = 0;
long temp = 0;
for (i=0; i<n-2; i++)
for (j=i+1; j<n-1; j++)
{
temp = N - p[i] - p[j];//计算N与任意两个数的差值;
for (k=n-1; k>j; k--) //将差值与其它的每一个值进行比较;
{
if (temp == p[k])
{
return 1;
}
if (temp > p[k])
{
break;
}
}
}
return 0;
}
你有什么更好的方法吗?
我这里有一个问题,想了一天多也找不也好的解决方法,如果你有好的方法,请告诉我好吗?在下不胜感激。
问题是这样的:
有n个整数,(1 <= n <= 1000 ),它们的值的范围是-536870912到+536870911(很大吧,呵) ,现在给一个数m,判断m是否是这n个数中的某三个数的和。
我写了关于这个问题的函数,可惜,速度不够快,其体如下:
/***************************************************************************
*函数原型:int compare(long *p, int n, long N)
*函数功能:p指向从小到大的有序数组,n为该数组的个数,查找p指向的数组中是否有
* 三个元素的和为N
*返回值: 若存在则返回 1,否则返回 0;
****************************************************************************/
int compare(long *p, int n, long N)
{
int i = 0;
int j = 0;
int k = 0;
long temp = 0;
for (i=0; i<n-2; i++)
for (j=i+1; j<n-1; j++)
{
temp = N - p[i] - p[j];//计算N与任意两个数的差值;
for (k=n-1; k>j; k--) //将差值与其它的每一个值进行比较;
{
if (temp == p[k])
{
return 1;
}
if (temp > p[k])
{
break;
}
}
}
return 0;
}
你有什么更好的方法吗?