原帖由 [bold][underline]dumpling131[/underline][/bold] 于 2007-12-25 18:41 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1160150&ptid=194191][/url]
我是想求极大值 不是最大值。如果你有好的代码,能不能给我?十分感谢。
我是想求极大值 不是最大值。如果你有好的代码,能不能给我?十分感谢。
区别是??????????????
----------------解决方案--------------------------------------------------------
学历太低,实在不知道最大值和极大值的区别.
----------------解决方案--------------------------------------------------------
极大值是指,在一个小邻域里的最大值, 这么一组数据1,2,5,4,3,6,1,5,8,3,1,11,2,3,5,22,33,1,2,3,2,1,6,5,9,1,5,2,极大值有很多个,5,6,8,11,33,9而最大值只有一个33。因为我不知道这些极大值在什么区域里,所以不能用求最大值的方法求极大值。
----------------解决方案--------------------------------------------------------
常识性错误
你的 b[ ]={0} c[ ]={0}
确定的数组长度只有1个元素. 所以运行会出现越界,而C是不检查是否越界的.
所以出现莫名的错误. 算法基本没问题, 取的邻域总共是5个数, 就是相邻5个数的最大值,另检查下数据总共是不是30个,少了也会出现小问题
----------------解决方案--------------------------------------------------------
把k++的位置换一下啊.因为k的位置不一样得到极值范围不一样啊
#include <stdio.h>
int find_max(int *a,int *b)
{
int i,n=0;
int M;
int k;
int c[30]={0};
M=30;//sizeof(a);
for (i=2;i<M-2;i++)
{
k=1;
printf("%d,",a[i]);
while (a[i-k]<a[i] && a[i+k]<a[i])
{ k++;
if(k==3)
{
b[n]=a[i];
c[n]=i;
n++;
}
}
}
for(i=0;i<n;i++)
{
printf("第%d是附近六项当中的最大值;\n",c[i]);
printf("a[%d]得值是:%d\n",c[i],b[i]);
}
return (n);
}
void main()
{
int n;
int a[30]={1,2,5,4,3,6,1,5,8,3,1,11,2,3,5,22,33,1,2,3,2,1,6,5,9,1,5,2};
int b[30]={0};
n=find_max(a,b);
}
----------------解决方案--------------------------------------------------------
终于解决了,谢谢16楼的。不过还有一个问题,就是不知道数组b中会有多少个数据,但是又不想 占用太多的内存空间,有什么办法么?
----------------解决方案--------------------------------------------------------
c好象不支持数组动态定义啊,vb好象可以动态定义啊.要是不嫌麻烦可以动态开辟内存空间*malloc( size_t size );
----------------解决方案--------------------------------------------------------
如楼上, 只能用动态内存分配函数.
少量数据的情况下,其实用固定数组问题不大,当数据量巨大的情况下,用链表吧, 这样空间浪费少..
----------------解决方案--------------------------------------------------------
谢谢各位了
----------------解决方案--------------------------------------------------------