| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 727 人关注过本帖
标题:请大神帮忙指出算法是否存在问题,为啥我运行出不来结果,谢谢!
取消只看楼主 加入收藏
沉鱼飞雁
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-11-4
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
请大神帮忙指出算法是否存在问题,为啥我运行出不来结果,谢谢!
程序代码:
#include <stdio.h>
#define pi 3.1415
size_t foo( const double src[][2], size_t src_len, double dst[][2] )
{
    if( src_len == 0 )
        return 0;

    size_t dst_len = 1;
    dst[0][0]=src[0][0], dst[0][1]=src[0][1];
    for( size_t i=1; i!=src_len; ++i )
    {
        const double delta0 = src[i][0] - dst[dst_len-1][0];
        const double delta1 = src[i][1] - dst[dst_len-1][1];
        size_t cnt = 1;
        for( double tmp=delta0; tmp>0.1; tmp/=2, cnt*=2 );

        for( size_t j=0; j!=cnt; ++j )
        {
            dst[dst_len][0] = src[i][0] - ( (cnt-1-j)*1.0/cnt )*delta0;
            dst[dst_len][1] = src[i][1] - ( (cnt-1-j)*1.0/cnt )*delta1;
            ++dst_len;
        }
    }

    return dst_len;
}
int main()
{
    double a[][2]={{0,100},{1,150}};
    size_t H1=0,H2=0;
    size_t i,j,k,m,l,h,p,n;
    double L1=0,L2=0,D=0.617,e=0.012;
    double b[100000][2],Q[100000][2];
    size_t b_len = foo( a, sizeof(a)/sizeof(*a), b );
    
    for(i=0; i!=b_len; ++i )
    {
        for(j=i;j!=b_len;j+=H1)
        {
            if(b[j+1][1]-b[j][1]>0)
            {
                for(k=j;(k!=b_len)&&(b[k+1][1]-b[k][1]>0);k++)
                L1+=b[k][0]-b[j][0];
                H1=k-j;
            }
            else
            {
                for(m=j;(m!=b_len)&&(b[m+1][1]-b[j][1]<=0);m++);
                H1=m-j;
            }
        }
        for(l=i;l!=0;l-=H2)
        {
            if(b[l-1][1]-b[l][1]>0)
            {
                for(h=l;(h!=0)&&(b[h-1][1]-b[h][1]>0);h--);
                L2+=b[l][0]-b[h][0];
                H2=l-h;
            }
            else
            {
                for(p=l;(p!=0)&&(b[p-1][1]-b[l][1]<=0);p--);
                H2=l-p;
            }
        }
        Q[i][0]=b[i][0];
        Q[i][1]=(L1+L2)*pi*(D-2*e)*(D-2*e)/4.0;
    }
    for(n=0; n!=b_len; ++n )
        printf("%g\t%g\n",Q[n][0],Q[n][1]);

    return 0;
}
2016-08-05 10:56
沉鱼飞雁
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-11-4
收藏
得分:0 
一组二维数据A,(为方便叙述,行方向为x,列方向为y).先对每一行的第一个元素进行处理,使得相邻两个数据的差值小于0.1,不满足时在中间插入中间值,直到满足条件为止,此时y方向进行同样的做中间值得计算,得到扩充后的新数组(这个问题昨天发帖求助了)。对于得到的新数组B,从x方向中任意一点(x1,y1)开始,向左右两边同时寻找,寻找条件:满足最近的一点(x2,y2),y2>y1,以(x2,y2)为起点,继续向该方向,找到一个趋势发生改变的点(x3,y3),记录L=x3-x2(向右方向时),接着再以(x3,y3)为起点,接着向右寻找,寻找条件一样,直到数组的最后一组数据,此时累计找到的满足条件的长度,向左寻找的要求一样,此时求总长度,放到一个新数组C里,最后输出的新数组C为对应于数组B中每一点,按要求寻找的总长度。
示意图.zip (825.92 KB)

不知道表达得是不是清楚。。。还请指教!
2016-08-05 11:27
沉鱼飞雁
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2015-11-4
收藏
得分:0 
已经自行解决,b数组和Q数组的行数超过定义了。。。
2016-08-05 21:04
快速回复:请大神帮忙指出算法是否存在问题,为啥我运行出不来结果,谢谢!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019293 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved