对于n个数,出栈方式总共有:1*2*3*...*(n-1)*(n-1)+1如1,2,3,4,5,6,则n=6,一共能得到不同的出栈方式有:
1*2*3*4*5*5+1=601 (种)

解决方案 »

  1.   

    通過邏輯歸納,同意jjcccc()的算法結論.
    对于依次入栈的n个数,出栈方式总共有:
    1*2*3*...*(n-1)*(n-1)+1(种)
      

  2.   

    jjcccc() 你能解释一下吗?不太明白
      

  3.   

    因为n个数出栈方式按理说就是n个数的全排列,即n!,但对于堆栈来说,若最后一个数进栈了,那它的出栈方式只有一种可能,就是:n,n-1,...,1
     所以计算出栈排列的时候,先确定第一个出栈的不是最后一个数,则共有:
     1*2*...*n-1*2*...(n-1)
    然后再加上n第一个出栈的这一种可能,总共就有:
     1*2*...*n-1*2*...(n-1)+1  =  1*2*...*(n-1)*(n-1)+1
      

  4.   

    to qqqdong() :这题意是指各种入帐再出栈后,共有多少中结果,比如2个数1,2
    则有:
    push 1;
    pop ;
    push 2;
    pop;---结果是1,2若:
    push 1;
    push 2;
    pop;
    pop;---结果:2,1共两种
      

  5.   

    如果是1,2,3,4,5,6随意顺序入栈的话,不就是一个全排列的问题?因为所有排列的情况都可以用栈实现出来啊。有必要那么麻吗?楼主问的是: 几种不同的出栈方式?(到底是什么意思?)
    push 1;
    push 2;
    push 3;
    push 4;
    push 5;
    push 6;pop;
    pop;
    pop;
    pop;
    pop;
    pop;和push 6; 
    pop ;
    push 5; 
    pop ;
    push 4; 
    pop ;
    push 3; 
    pop ;
    push 2; 
    pop ;
    push 1; 
    pop ;
    可以理解上面是同样的出栈方式吗?
      

  6.   

    HNU(HNU) ( ) :
    其实我记得这好像是大学《数据结构》上的一个练习题(10年前的学的,记不清了),意思是1,2,3,4,5,6入栈,但不能颠倒顺序,即必须按1,2,...,6的顺序入栈,但出栈可以在任意时候(比如push 1后马上pop,在push2,...,但不能先push 2,再push 1),问出栈总共有多少种方式?所以可能你误会题意了