斗战圣皇无修txt下载:pascal选数

来源:百度文库 编辑:高校问答 时间:2024/04/27 20:47:45
在N个数中选出K个数
这个程序如何编
最好解释一下
感激不尽
比如1,5,6,7这4个数中选3个都选到1,5,6;1,5,7;5,6,7

题目说得不清楚
选什么数?选数有什么要求?
-----------------------------
1,5,6,7这4个数中选3个都选到1,5,6;1,5,7;5,6,7
还有一种1,6,7
这个是简单搜索题目

源代码(本人的方法有点笨 复杂度很高 但对于一般的题目已经足够了):
program xuanshu;
const max=20;//最大设为20=>结果最大有20!/(10!)^2种
type arr=array[1..max]of boolean;
var n,k,i:integer;bo:arr;
a:array[1..max]of integer;
procedure search(t:integer;bo:arr;x:integer);
var i:integer;bo1:arr;sc:boolean;
begin
if t=k then begin//如果步数达到k就输出
sc:=false;//控制输出的空格
for i:=1 to n do
if bo[i] then begin
if sc then write(' ') else
sc:=true;
write(a[i]);
end;
writeln;
end else begin
inc(t);//准备下一步的搜索
for i:=x+1 to n do
if not bo[i] then begin
bo1:=bo;bo1[i]:=true;
search(t,bo1,i);
end;
end;
end;
begin
write('Input n:');readln(n);
write('Input k:');readln(k);
for i:=1 to n do read(a[i]);//input
fillchar(bo,sizeof(bo),0);//控制变量定初值
search(0,bo,0);//开始步数为0从0+1开始的搜索
end.

program xuanshu;
var n,k,i,j:integer
a:array;

begin
write('input n,k');
read(n,k);
for i:=1 to n do
begin
read(a[i];
end;

write('xuan shu');
for i:=1 to k do
begin
read(j);
write(a[i]);
end;
end.
j是第几个数