首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

毕设接近尾声,可是遇到有关问题。高手来拿分

2012-02-13 
毕设接近尾声,可是遇到问题。高手来拿分~我有5000个数据,要求做到以下内容:从前20个里面找最大值,并求20个

毕设接近尾声,可是遇到问题。高手来拿分~
我有5000个数据,要求做到以下内容:
从前20个里面找最大值,并求20个的均值,(1)如果最大值小于均值,那么从后20个中找最小值;(2)如果最大值大于均值,继续从后20个中重复上一步,直到找到符合条件的最大值(小于均值)。

如果找到了符合条件的最大值,也就是上面的(1),则接着从后面的20个数据中找最小值,(3)如果最小值小于均值,那么从再后面的20个里找最大值,即回到上面的循环;(4)如果最小值大于均值,继续从再后面的20个里找最小值,直到找到符合条件的最小值。

一直重复上面的步骤,直到找到所有符合条件的最大最小值对。(最大最小值对的位置一定要知道)
这样就ok了。可是用到那么多循环,怎么实现呢?思考一整天了。。。菜鸟毕竟能力有限,希望大虾们帮忙~

最好只用for,if,while什么的循环,这样我能看明白。
有不清楚又想帮忙的请留言,我将把问题完善一些提出来。
就这样。

[解决办法]
这个题你说的有误吧 "从前20个里面找最大值,并求20个的均值,(1)如果最大值小于均值 "最大值能小于军值吗
[解决办法]
/***********************************************************************************

如上所说是你的叙述出了问题,最大值肯定是大于均值的,这个无可厚非,我想你可能是想表达下面的里司,先在前10个元素中选出最大值,然后再在这个最大值开始的后20个元素中选出最小值并且记录这些最大\最小值的元素下标,试试下面这个方法,应该可以的....

***********************************************************************************/

//引自????????

flagswitch=true;//最大或者最小的标志
do{
endflag=checkValid(arrayTail,from);//从from到数组末尾距离是否小于20
if(flagswitch)
{
findMax(from,arrayTail);//计算从from 开始的极大值
flagswitch=false;//下次计算极小值
}
else
{
findMin(from,arrayTail);//计算从from开始的极小值
flagswitch=true; //下次计算极大值
}
if(!endflag)
from+=20;//从上次计算的极值点开始到数组末尾还有至少20个元素,可移动,不会越界
}while(!endflag) ;
[解决办法]
#include <stdio.h> #include <stdlib.h>

int aver(int a[]) //求a[0]~a[19] 的平均值
{
int sum=0, i;
for(i=0; i <20; i++)
sum+=a[i];
return sum/20;
}

int findMAX(int a[]) //求a[0]~a[19] 的最大值, 返回下标
{
int t=0, i;
for(i=1; i <20; i++)
if(a[i]> a[t])t=i;
return t;
}

int findMIN(int a[]) //求a[0]~a[19] 的平均值, 返回下标
{
int t=0, i;
for(i=1; i <20; i++)
if(a[i] <a[t])t=i;
return t;
}

int main()
{
int a[5000]={...};
int result[250], index=0, i=0;

while(i <5000)
{
int tmp, a;
if(index%2==0) //偶数下标, 保存极大值
{
average=aver(&a[i]); //求得 平均值
tmp=findMAX(&a[i]); //得到 当前组20个数据极大值下标
if(a[tmp] <average)result[index++]=tmp; //符合要求则保存
}
else //奇数下标, 保存极小值
{
average=aver(&a[i]);
tmp=findMIN(&a[i]);
if(a[tmp]> average)result[index++]=tmp;
} //如果数据不符合要求,在从下一组数据中继续搜索
i+=20;
}
printf( "FIND:\n ")
for(i=0; i <index/2; i++)
printf( "Pair %d: %d--%d\n ", i+1, a[result[2*i]], a[result[2*i+1]]);
system( "pause ");
return 0;
}

注意 result 数组中保存的只是 对应的下标

热点排行