你可以把取出的数先排序,比如2 4 7 9,然后把2对应1代入,4对应2人入
7对应3 ,9对应4代入你上面举的那个例子的序列。因为只要顺序是对的都是一样的吗?然后你可以用一个这样函数比如:
setNo1(iNew:integer);这一个函数把所有你上面的例子中为1的值改为你传入的值。如
setNo1I7)则会为;0000 7000 0200 0030 0004 7200
然后你再写出setno2 setno3 setno4不过这是一种投机方法,如果你的程序
要求可以不只要取4个可能还会有5个6个的那就要再分析 了
我的算法没有过关,请大家不要见笑!
7对应3 ,9对应4代入你上面举的那个例子的序列。因为只要顺序是对的都是一样的吗?然后你可以用一个这样函数比如:
setNo1(iNew:integer);这一个函数把所有你上面的例子中为1的值改为你传入的值。如
setNo1I7)则会为;0000 7000 0200 0030 0004 7200
然后你再写出setno2 setno3 setno4不过这是一种投机方法,如果你的程序
要求可以不只要取4个可能还会有5个6个的那就要再分析 了
我的算法没有过关,请大家不要见笑!
解决方案 »
- 文件菜单中的历史文件名有没有简便的处理方法
- 请问Self.Components[i]怎么用
- 求助:Indy 9.0.18中TIdTCPServer停止服务时出错!
- 求一句SQL语句,HOHO,Help!!!!!!!!!!!!!!!!!
- 这样行吗?一个C/S程序只用一个QUERY和一个DataSource和一个ADOConnect可以吗?
- AUTOEXEC.BAT文件不会自动启动
- 一个简单但是捆饶我的问题!
- ADOQUERY 运行SQL语句的问题
- 我的这句SaveToStream有什么问题?
- 请教大虾:sleep函数怎么用?比如想让一副画显示5秒钟?
- 什么动太的取得数据库中的表各及各表中的字段?
- 如何仿造IE的地址栏下拉框?
1、2、3、4、5、6、7、8、9、、、、N 这些数字组合(不是排列),用数组A来表示这些组合的所有方式,如:第一个组合为:1234,那么A[1,1]=1,A[1,2]=2,A[1,3]=3,A[1,4]=4;我想把所有的组合,打印到窗体上,现在我想知道这种算法?
c(1,4): 1,2,3,4
c(2,4): 12,13,14,23,24,34
c(3,4): 123,124,134,234
c(4,4): 1234
共有: c(0,4)+c(1,4)+c(2,4)+c(3,4)+c(4,4)=2^4=16
所有这个程序分解为求: c(m,n)
我有这个程序,不过是用C++BUILDER的编的
c(4,4):1234,那么1243 4321 3124都应该是符合要求的啦 ?
program Project2;{$APPTYPE CONSOLE}uses
SysUtils;const m=5;n=4; //从M个元素中取N个的所有组合
var
i,j,k:integer;
b:array [0..n] of integer;
begin
k:=0;
for i:=1 to n do b[i]:=i;
b[0]:=-1;
while b[0]<0 do
begin
j:=n;
inc(k);
while b[j]=m-n+j do j:=j-1;
b[j]:=b[j]+1;
for i:=j+1 to n do b[i]:=b[i-1]+1;
for i:=1 to n do write('':10,b[i]:5); //输出一个组合
writeln;
end;
writeln(' Total=',k); //组合的总个数
readln;
end.