1樓:
簡單回溯:
這個**是我剛編的,通過了:
const max=9;
var m,n :longint;
a:array[1..max] of longint;
procedure work(j,k:longint);//j 為列舉第j個數字,k 為上次的列舉值
var i :longint;
begin
if j=m+1 then
begin
for i:=1 to m-1 do write(a[i],' ');//輸出
writeln(a[m]);
endelse
for i:=k+1 to n-m+j do//第 i 個的範圍是如此,k+1好理解,n-m+j可以通過數學方法證明。例 8 3,則第乙個最大範圍是1~6,第二個是2~7,3~8,如此
begin
a[j]:=i;
work(j+1,i);//回溯
end;
end;
begin
readln(n,m);
work(1,0);
end.
應該能看懂!!
2樓:匿名使用者
program xy;
varn,i,k,j:integer;
a:array[0..100]of integer;
b:array[0..100]of boolean;
procedure find(k:integer);
var j:integer;
begin
if k=n+1 then begin writeln;for i:=1 to n do write(a[i],' ');
end ;
for j:=1 to n do
begin
if b[j] then
begin
b[j]:=false;
a[k]:=j;
find(k+1);
b[j]:=true;
end;
end;
end;
begin
readln(n);
fillchar(b,sizeof(b),true);
fillchar(a,sizeof(a),0);
find(1);
readln;
end.
3樓:匿名使用者
這個是全排列的變式,和全排列很像,我直接給你寫一下。
procedure try(d:integer);
var i,j,k:integer;
begin
if d=n+1 then
begin
for i:=1 to n do
write(a[i]);
end else
begin
for i:=1 to m do
if bj[i]=false then
begin
bj[i]:=true;
a[n]:=i;
try(n+1);
bj[i]:=false;
end;
end;
end;
read(m,n);
try(1);
這個幾乎是偽**,看看差不多
bj是判重,a是daan
4樓:匿名使用者
program e;
varn,t:longint;
a:array[1..8] of integer;
flag:array[1..8] of boolean;
procedure search(depth:integer);
vari:integer;
begin
if(depth>n) then
begin
for i:=1 to n do write(a〔i〕:4);
writeln;
inc(t);
exit;
end;
for i:=1 to n do
if flag〔i〕=false thenbegin
a[depth]:=i;
flag〔i〕:=true;
search(depth+1);
flag〔i〕:=false;
end;
end;
begin
read(n);
t:=0;
fillchar(flag,sizeof(flag),false);
search(1);
writeln('total=',t);
end.
vara : array [1..10000] of longint;
n, m, i, k, e, t : longint;
begin
readln(n);
readln(m);
for i:=1 to n do
read(a[i]);
for m:=m downto 1 do begink := n;
while a[k-1] > a[k] dodec(k);
e := n;
while a[k-1] > a[e] dodec(e);
t := a[k-1];
a[k-1] := a[e];
a[e] := t;
e := n;
while k < e do begin
t := a[k];
a[k] := a[e];
a[e] := t;
inc(k);
dec(e);
endend;
for i:=1 to n-1 do
write(a[i], ' ');
writeln(a[n]) ;
end.
Pascal習題 求N個數的全排列
var a array 1.100 of longint n longint b array 1.100 of boolean procedure f sum longint var j longint begin if sum n then begin for j 1 to n do write ...
全排列問題
這個 有問題,修改一下 void perm int list,int k,int m else 這樣才能求出非3位陣列的全排列 思路 假設n個數的全排列是perm list,1,n 即從第1個開始到第n個數的全排列,那麼它的解可以劃分為子問題 當第一位確定是某個數的時候,其餘數的全排列。假設第一位確...
數字排列的問題!請教,C語言數字全排列的問題(急!!)求C程式碼和演算法
解肯定不唯一了,我隨便想乙個 每組20行,每行的0 9出現頻率相同 第一組000,111,222,333,444,999001,112,223,334,445,990002,113,224,335,446,991.019,120,231,342,453,908第二組 020,131,242,353,...
包門套全包怎樣算,包門套全包怎樣算價格
首先你要算出門套材料多少錢,再加上你需要用的輔料以及門套簡易程度 根據你自己的效率一天能做多少,以及其他費用,根據這些元素來算。包門套全包怎樣算 首先門套全包有二個部分,一門套裡面的木板 一張板可以做多少個門套,板子成本,以及一些木板輔料的費用,二根據要求不鏽鋼一張板可以做多少個門套,如果尺寸合適材...
從1 5全排列,有多少種方法?要詳細排法。給20分
共有5 4 3 2 1 120種排法.具體排法 12345 12354 12435 12453 1253412543 13245 13254 13425 1345213524 13542 14235 14253 1432514352 14523 14532 15234 1524315324 1534...