思路求教/递推公式的数学讨论
查看原帖
思路求教/递推公式的数学讨论
302143
指针Pointer楼主2022/8/27 18:22

本人的思路是这样的:

不妨令操作数序列为1,2,3,4,输出序列总数目为dc(n)

(1)输出序列第一个数为1时,剩下的也就是2,3,4的输出序列数,即dc(3);

(2)输出序列第一个数是2时,可以看作是1,3,4的输出序列数,也为dc(3);

(3)输出序列第一个数是3时,2一定在1的前面,由排列组合公式,此时的情况有3!/2!=3种(高中数学的定序问题)

(4)输出序列第一个数是4时,3,2,1顺序已固定,即3!/3!=1种

故得出递推公式:dc(4)+=dc(3)+dc(3)+3!/2!+3!/3!

操作序列长度为五时类似可得:dc(5)=dc(4)+dc(4)+4!/2!+4!/3!+4!/4!

C++代码实现(只给出函数部分):

long long int dc( int a ){
    long long int ret=0;
    if( a==1 )
        ret=1;
    else if( a==2 )
        ret=2;
    else{
        long long int sum1=1,sum2=0;
        for( int j=2 ; j<a ; j++ ){
            for( int i=a-1 ; i>j ; i-- )
                sum1*=i;
            sum2+=sum1;
            sum1=1;
        }
        ret+=2*dc(a-1)+sum2;
    }
    return ret;
}

此方法得出1,2,3,4均与答案一致,劳烦各路高人指点一下方法不合理之处在哪里,不甚感激

2022/8/27 18:22
加载中...