不过可以通过硬盘来临时存放,最大的String是2G 大小,应该够了!
不过-----疯狂!

解决方案 »

  1.   

    不过可以通过硬盘来临时存放,最大的String是2G 大小,应该够了!
    不过-----疯狂!
      

  2.   

    我想大家没有明白问题的真正意义。
    主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
    我想大家没有明白问题的真正意义。
    主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
    我想大家没有明白问题的真正意义。
    主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
    我想大家没有明白问题的真正意义。
    主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
    我想大家没有明白问题的真正意义。
    主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
    我想大家没有明白问题的真正意义。
    主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
      

  3.   

    Pn1+Pn2+..+Pnn
    高几学了的来着?
      

  4.   

    我记得在《C++大学教程》(或者是《程序员教程》)里有个程序是用来计算数字的组合的,给出了N=5时的例子,那个程序是个递归程序,可以适应N的变化,可以改成排列字符串的程序。我回去看看再说。
      

  5.   

    function fun1(ary : array of string;n : integer) : String;
    var
      tmp : string;
    begin
       if Length(ary)= 0 then
           Result := '-1';
       for i := low(ary) to high(ary) do
       begin
          if n-1 > 0 then
             tmp := fun1(从i+1起步到ary最后一个字符组成的数组,n-1);//
          if tmp = '-1' then
             Result := tmp
          else      
             Result := ary[i]+tmp;
       end;
    end;
    算法基本如此,为加测试,但思路是这样的,如果可以请给分,谢谢!
      

  6.   

    to  zj_jun(zj_jun) :
    我觉得你说的不对.
    你这样的话得到的只有一个result,难道让自己控制n?
    那么怎么控制呢?
      

  7.   

    n个char的排列组合方式如果必须都用上的话那么是n!个.
    别忘了亚.
      

  8.   

    to: INeedCa(缺钙)
    请看清楚,不是要知道有多少种排列,是要是到都是什么!
    你说的pn1+...+pnn=2^n-1
      

  9.   

    to: colacoca(我是一瓶倒过来的可口可乐) 
    请问怎么穷举?
      

  10.   

    to ihihonline(小小):
    不,我觉得很有水平,因为连数学很好的理论家和评论家 ihihonline(小小) 先生都没有能拿出实际的做法.呵呵...
      

  11.   

    我就不明白,各位说小儿科的也好,说问题别的也好,怎么就不能拿出一套具体的做法呢?吹牛B的别来!
    吹牛B的别来!
    吹牛B的别来!
    吹牛B的别来!
      

  12.   

    回溯:
    假设不同字符已经存在string n 里了
    var 
    Quantity: integer;
    SaveStr:  Tstring;begin
      SaveStr:=TstringList.Create;
      Quantity:=length(n);
      Fback(Quantity,'',n);end;Function Fback(P:integer;w,word2:string);
    var
    i: integer;
    begin
      w=w+word2[p];
      SaveStr.add(w);
      
      if length(word2)>1 then
      begin 
        for i:=1 to length(word2)
        begin
          Fback(i,w,Copy(word2,1,p-1)+Copy(word2,p+1,length(word2)-p-1));
        end;
      end;end;所有字符串保存在Tstring SaveStr里了
    大体思想是如此,用回溯穷举
      

  13.   

    以n个字符建一个枚举类型。如'枚'(从枚1到枚n)
    建立一个函数s(枚i:枚),将枚1和枚n转化为它们代表的字符(容易建,老老实实的一一对应赋值)
    然后程序如下
    var j1,j2....jn:枚;
    for j1:=枚1 to 枚n do
    for j2:=枚1 to 枚n do......
    ......
    for jn:=枚1 to 枚n do
      begin
       用一个函数检查j1到jn是否有相同的值,如果有就continue;
       i:=i+1;{计数用的}
       x[i]:=s(j1)+s(j2)+...+s(jn);
      end;
    这是得出的所有n位的组合。第二步去掉一个字符。以n-1个字符建一个枚举
    大致同上。直到求出只有一个字符的组合。 但是去掉字符的过程也很复杂,因为需要确定去掉哪些字符,
    以下就是去掉字符的算法
    1。确定要去掉多少个,假如为k
    2。var j1,j2....jk:枚;
    for j1:=枚1 to 枚n do
    for j2:=枚1 to 枚n do......
    ......
    for jk:=枚1 to 枚n do
      begin
       用一个函数检查j1到jk是否有相同的值,如果有就continue;
       如果不相同就以j1到jk建立一个集合,然后存在一个数组中。
       end;
    {这里就得到了所有可能去掉的k个字符的组合,但是有重复,为了简化,可用一个子程序将多余的集合去掉}。由此,结合以上两个步骤,完全可以得到所有的组合。
      

  14.   

    ahuige(灰不遛秋)兄弟,不是我不结,难道我放出来的分系统会允许我收回嘛?
    我是还没找到更好的方法,你的方法我总觉得有点慢。
      

  15.   

    colacoca(我是一瓶倒过来的可口可乐) 
    的解答是最正确的啦,这个问题我在中学学basic时就见过啦!回朔错不了。
    ahuige(灰不遛秋) 的机械的循环不能无限嵌套的!
      

  16.   

    winglion(狂言)老兄说我的循环不能无限嵌套,但是这里的条件是n个不同的字 符,最多只有n次循环,所以不存在无限嵌套的问题。
       colacoca兄的解答,我看得不太懂。但直觉认为,他的移位的方法好象不能将所有的组合排出来,因为光是在中间切断,倒过来接,不论循环多少次,都不能排出所有组合,以上看法有何不对,请大家指点。
      

  17.   

    而且colacoca兄的解答的这一句
    Fback(i,w,Copy(word2,1,p-1)+Copy(word2,p+1,length(word2)-p-1));
    我想最后一个减号他的原意是不是应该是-(p-1);
    因为如果是-p-1的话,
    Copy(word2,1,p-1)+Copy(word2,p+1,length(word2)-p-1))的长度就
    等于p-1+length(word2)-p-1=length(word2)-2.一下少了两位,我就更看不懂了
    不知我的想法是否正确。