| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1488 人关注过本帖
标题:求高手指点一个超级复杂的C程序
只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
= =怪不得……………………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-17 13:44
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
百度到了……………………

这题怎么解?

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-17 13:49
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
说错了》。是维基百科:http://zh.

csdn也有个这样的贴...看到个用栈的做法:http://topic.

樱花大战,  有爱.
2008-10-17 19:07
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
ask(4,2)太大,无法正常输出

#include <iostream>
#include <stdlib.h>
#include <vector>
#include <math.h>
using namespace std;
class TempClass
{
public:
    TempClass();
    TempClass(double m ,double n , double iResult);
    ~TempClass(){}

    double m_M ;
    double m_N ;
    double m_iResult ;
};

TempClass::TempClass():m_M(0),m_N(0),m_iResult(0)
{
}
TempClass::TempClass(double m ,double n , double iResult):m_M(m),m_N(n),m_iResult(iResult)
{
}

class TempClass2
{
public:
    TempClass2(){};
    ~TempClass2(){}

    void AddResult(double m ,double n , double iResult);
    bool IsHaveResult(double m ,double n, double* iResult = NULL );
private:
    std::vector<TempClass> m_resultV ;
};
void TempClass2::AddResult( double m ,double n , double iResult )
{
    if ( !IsHaveResult( m,n ) )
    {
        TempClass temp(m,n,iResult);
        m_resultV.push_back(temp) ;
    }
}
bool TempClass2::IsHaveResult(double m ,double n , double* iResult )
{
    std::vector<TempClass>::iterator it = m_resultV.begin() ;
    for ( ; it != m_resultV.end() ; ++it )
    {
        if ( it->m_M == m && it->m_N == n )
        {
            if ( NULL != iResult )
            {
                *iResult = it->m_iResult ;
            }
            return true ;
        }
    }
    return false ;
}

TempClass2 temp ;
double  ack(double m,double n)
{
    double iResult = 0 ;
    if ( temp.IsHaveResult( m,n,&iResult))
    {
        return iResult ;
    }

    if(n==0)
    {
        iResult = (ack(m-1,1));
    }else if(m==0)
    {
        iResult = 1 + n ;
    }else if ( m == 1 )
    {
        iResult = 2 + n ;
    }else if ( m == 2 )
    {
        iResult = 3 + 2*n ;
    }else if ( m == 3 )
    {
        iResult = 5 + 8*(pow((double)2,n) -1);
    }else
    {
        iResult = ack(m-1, ack(m, n-1));
    }
    temp.AddResult(m,n,iResult);
    return iResult ;
}
int _tmain(int argc, char *argv[])
{
    ack(1,2);
    ack(1,3);
    ack(2,3);
    ack(3,2);
    ack(4,2);

    double iResult = 0 ;
    temp.IsHaveResult( 1 , 2 , &iResult ) ;//ack(1,2)
    cout<<"ack(1,2) = "<<iResult<<endl ;
    temp.IsHaveResult( 1 , 3 , &iResult ) ;//ack(1,3)
    cout<<"ack(1,3) = "<<iResult<<endl ;
    temp.IsHaveResult( 2 , 3 , &iResult ) ;//ack(2,3)
    cout<<"ack(2,3) = "<<iResult<<endl ;
    temp.IsHaveResult( 3 , 2 , &iResult ) ;//ack(3,2)
    cout<<"ack(3,2) = "<<iResult<<endl ;
    temp.IsHaveResult( 4 , 2 , &iResult ) ;//ack(4,2)
    cout<<"ack(4,2) = "<<iResult<<endl ;

    _sleep(10000) ;
    return 0;
}
2008-10-17 22:44
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
LS:需要这样么?这样会很慢的呢………………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-18 01:41
快速回复:求高手指点一个超级复杂的C程序
数据加载中...
 
   



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

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