您的位置:首页 > 编程语言 > Ruby

Ruby,Block,CPS 和 call/cc

2008-01-03 09:39 323 查看



/**//*


    标题:<<系统设计师>>应试编程实例-[递推算法程序设计]


    作者:成晓旭


    时间:2002年09月11日(11:52:00-16:26:00)


          实现递推算法的大整数阶乖处理函数


    时间:2002年09月16日(18:38:00-20:02:00)


          实现“斐波那契数列”问题的递推算法函数


*/


#include    "stdio.h"


#include    "stdlib.h"




//:============================“大整数阶乖”问题的递推算法===========================


#define        MAXN    1000        //最大数据位数


//用递推法求取整数k的阶乖,将结果放入数组array中


void    pnext(int    array[],int k)




...{


    int    *temp;    //动态数组[临时存储运算大整数]


    int    i,j,num_len = array[0],carry,t;    //循环变量,长整数位数,进位标志,临时变量


    if(array[0] >= MAXN)




    ...{


        printf("数据处理位数超过程序设计上限,程序将自动中断运行! ");


        exit(1);


    }


    temp = (int *)malloc(sizeof(int) * (num_len + 1));    //创建动态数组


    for(i=1;i<=num_len;i++)


        temp[i] = array[i];        //保存原始数据


    for(j=1;j



    ...{


        for(carry = 0,i=1;i<=num_len;i++)




        ...{


            if(i <= array[0])            


                t = array[i] + temp[i] + carry;


            else


                t = array[i] + carry;    //处理最高位


            //数据位调整


            array[i] = t % 10;


            carry = t / 10;


        }


        if(carry)


            array[++num_len] = carry;    //在最高位记录进位标志


    }


    free(temp);


    array[0] = num_len;


}


//显示阶乖结果


void    Show_Result(int array[],int base_number)




...{


    int i;


    printf("%4d!=",base_number);


    for(i=array[0];i>0;i--)


        printf("%d",array[i]);


    printf(" ");


}


//计算数据的阶乖


void    Count_Result(int array[], int base_number)




...{


    int    k;


    array[0] = 1;


    array[1] = 1;


    for(k=2;k<=base_number;k++)




    ...{


        pnext(array,k);


        Show_Result(array,k);


    }


}


//:============================“大整数阶乖”问题的递推算法===========================


//:============================“斐波那契数列”问题的递推算法===========================




/**//*


    问题描述:


        标准斐波那契数列:


            F(0) = 0,F(1) = 1,Fn) = F(n-2) + F(n-1)(当n > 1时)


        广义斐波那契数列:


            F(0) = 0,F(1) = 0,F(2) = 1,Fn) = F(n-3) + F(n-2) + F(n-1)(当n > 2时)


*/


//标准斐波那契数列的递推算法函数


int        Std_Fibonacci(int number)




...{


    int    f0 = 0,f1 = 1,result,loop;    //初始值1,2,返回结果,循环计数器


    if(number == 0)        return(0);


    if(number == 1)        return(1);


    for(loop = 2;loop <= number;loop ++)




    ...{


        result = f0 + f1;    //由前两步的结果计算当前结果--->“推出”


        f0 = f1;            //把原来的前一步当作下一次的前两步--->“传递”


        f1 = result;        //把当前结果当作下一次的前一步--->“传递”


    }//注意:在进行这种向前传递的操作时,特别小心传递的时序


    return(result);


}


//广义斐波那契数列的递推算法函数


int        Ext_Fibonacci(int number)




...{


    int    f0 = 0,f1 = 0,f2 = 1,result,loop;    //初始值1,2,3,返回结果,循环计数器


    if(number == 0 || number == 1)        return(0);


    if(number == 2)        return(1);


    for(loop = 2;loop <= number;loop ++)




    ...{


        result = f0 + f1 + f2;    //由前三步的结果计算当前结果


        f0 = f1;


        f1 = f2;


        f2 = result;


    }//注意:在进行这种向前传递的操作时,特别小心传递的时序[即:变量间赋值的前后关系及先后顺序]


    return(result);


}


void    Run_Fibonacci()




...{


    int    large,result;


    while(large!=9910)




    ...{


        printf(" 请输入斐波那契数列的元素个数[Enter '9910' to Exit]: ");


        scanf("%d",&large);


        if(large!=9910)




        ...{


            //result = Std_Fibonacci(large);


            result = Ext_Fibonacci(large-1);


            printf("斐波那契数据中的第[%d] = %d ",large,result);


        }


    }


}


//:============================“斐波那契数列”问题的递推算法===========================


int main(int argc, char* argv[])




...{




/**//*


    int    LargeArray[MAXN],large = 0;


    while(large!=9910)


    {


        printf("请输入需要求取其阶乖的整数[Enter '9910' to Exit]: ");


        scanf("%d",&large);


        if(large!=9910)


            Count_Result(LargeArray,large);


    }


*/




    Run_Fibonacci();


    printf(" 应用程序运行结束! ");


    return 0;


}





Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=935912
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: