不过可以通过硬盘来临时存放,最大的String是2G 大小,应该够了!
不过-----疯狂!
不过-----疯狂!
解决方案 »
- 有开发进销存经验的朋友请帮忙
- frReport2.5 中设置主项数据后可以选择虚拟数据集并且可以设置显示的记录数,请问大家在程序中怎么用变量设置。
- 如何在三层C/S结构中实现数据库图像存取?
- 关于文件加密的问题!(100)
- 谁有QuickReport的打印预览汉化的,然后最好在预览窗口有导出多种格式的(XLS、TXT……)~
- 怎样让MDIChild的窗体打开时,出现闪动,即刚开始出现时较小,紧跟着最大化。
- 关于时间的问题
- 如何判断某个值在枚举类型中。
- 技术和非技术怎么分出来的??????还有怎么看我得分的问题和用户的信誉???
- &_&:delphi处理sqlserver表,当一表中出现完全同两条以上记录时报错:"too many ...",谁知道?
- 用CORBA时,找不到OrbPas.dcu的文件
- sql and delphi 中的复合查询平问题,急急!
不过-----疯狂!
主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
我想大家没有明白问题的真正意义。
主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
我想大家没有明白问题的真正意义。
主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
我想大家没有明白问题的真正意义。
主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
我想大家没有明白问题的真正意义。
主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
我想大家没有明白问题的真正意义。
主要不是考虑tstringlist的容量,主要是考虑怎样编求得所有的组合方式。
高几学了的来着?
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;
算法基本如此,为加测试,但思路是这样的,如果可以请给分,谢谢!
我觉得你说的不对.
你这样的话得到的只有一个result,难道让自己控制n?
那么怎么控制呢?
别忘了亚.
请看清楚,不是要知道有多少种排列,是要是到都是什么!
你说的pn1+...+pnn=2^n-1
请问怎么穷举?
不,我觉得很有水平,因为连数学很好的理论家和评论家 ihihonline(小小) 先生都没有能拿出实际的做法.呵呵...
吹牛B的别来!
吹牛B的别来!
吹牛B的别来!
假设不同字符已经存在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里了
大体思想是如此,用回溯穷举
建立一个函数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个字符的组合,但是有重复,为了简化,可用一个子程序将多余的集合去掉}。由此,结合以上两个步骤,完全可以得到所有的组合。
我是还没找到更好的方法,你的方法我总觉得有点慢。
的解答是最正确的啦,这个问题我在中学学basic时就见过啦!回朔错不了。
ahuige(灰不遛秋) 的机械的循环不能无限嵌套的!
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.一下少了两位,我就更看不懂了
不知我的想法是否正确。