1樓:匿名使用者
1. 建議不要用const,在主程式上readln(n);
2. a[1]:=i;
這裡是錯的,應該是a[i]:=i;你寫成了a[1]3. for i:=1 to n do
begina[1]:=i;
find(2)
end這裡find(2),不要放在迴圈裡面,正確的是for i:=1 to n do
begina[1]:=i;
endfind(1);
4.建一個陣列判斷i是否重複。
b:array[1..100]of boolean;
剛開始所有的i都是false fillchar(b,sizeof(b),false);
5. for i:=1 to n do
for j:=1 to k-1 do
beginif i<>a[j] then begina[k]:=i;
find(k+1)
endend
然後這裡就改成。
for i:=1 to n do
beginif b[i]=false then beginb[i]:=true
a[k]:=i;
find(k+1);
b[i]:=false;
end還有不明白的再問。end
pascal數字排列問題
數字排列問題(pascal)
2樓:匿名使用者
1. 建議不要用const,在主程式上readln(n);
2. a[1]:=i;
這裡是錯的,應該是a[i]:=i;你寫成了a[1]3. for i:=1 to n do
begina[1]:=i;
find(2)
end這裡find(2),不要放在迴圈裡面,正確的是for i:=1 to n do
begina[1]:=i;
endfind(1);
4.建一個陣列判斷i是否重複。
b:array[1..100]of boolean;
剛開始所有的i都是false fillchar(b,sizeof(b),false);
5. for i:=1 to n do
for j:=1 to k-1 do
beginif i<>a[j] then begina[k]:=i;
find(k+1)
endend
然後這裡就改成。
for i:=1 to n do
beginif b[i]=false then beginb[i]:=true
a[k]:=i;
find(k+1);
b[i]:=false;
end還有不明白的再問。end
3樓:網友
我想說的是,你的程式用了goto語句後就破壞了程式的協調性,難以對其進行優化,大牛的程式沒有goto語句就是因為程式自頂向下的設計方式是最簡單的,優化的話最好做個過程,用n個迴圈巢狀看看也不美觀,對吧。
4樓:匿名使用者
要用回溯法,程式如下,需要說明看這個網頁。
vara:array[0..100]of integer;
n,i:integer;
procedure make(p:integer);
var i,j,k:integer;
b:array[0..100]of integer;
beginif p=n then begin for i:=1 to n do write(a[i],'writeln;end
elsefor i:=p to n do
beginj:=a[i]; a[i]:=a[p]; a[p]:=j;
b:=a;make(p+1);
a:=b;end;
end;begin
readln(n);
for i:=1 to n do a[i]:=i;
make(1);
end.
【pascal】編寫一個程式,生成1,2,3,4,5五個數字的全排列
5樓:唯愛之浩兔子
varm,n:integer;
a:array[1..100]of integer;
fg:array[1..100]of boolean;
procedure print;
vari:integer;
beginfor i:=1 to m do
write(a[i],'
writeln;
end;procedure try(p:integer);
vari:integer;
beginif p>m then exit;
for i:=1 to n do
if not fg[i] then
begina[p]:=i;
fg[i]:=true;
if p=m then print
else try(p+1);
fg[i]:=false;
end;end;
beginfillchar(fg,sizeof(fg),0);
n:=5;m:=5;
try(1);
end.不行的話再來找我。
pascal求組合數的方法?
6樓:匿名使用者
因為組合數公式中,階乘的結果往往超過通常的資料範圍,所以在不需要高精度的情況下,我們通常用遞推公式求解。遞推公式是c(m, n) =c(m - 1, n) +c(m - 1, n - 1)(注:m = n時,把c(m - 1, n)當作0即可,無需特殊處理)邊界條件是c(1, 0) =1, c(1, 1) =1所以只需要開闢一個二維integer(或longint / int64)陣列由m = 1開始遞推即可即外層迴圈是m,內層迴圈是n
7樓:匿名使用者
c(m,n) =m!/(m-n)!n!!表示求階乘c表示求組合n!=1*2*3*..n0!=1如有任何問題請追問。
用pascal語言:輸入一個三位數的整數,將數字位置重新排列,組成一個儘可大的三位數。例如:輸入213,重
8樓:匿名使用者
if(b>=c)and(c>=a)then writeln(b,c,a>; 應該是『)』最後一行 writeln(a,b,a); 應該是(c,b,a);
倒數第二行 的readln 可以刪去。求採納。
pascal怎麼把四個數從大到小排列
pascal問題猜數字(難) 5
9樓:武風
這道題目方法是一定有的,但很遺憾,我只想到了最暴力的列舉輸入一個數,和那貨心中的數的位數。
把n位數每個都列舉一遍,求每個數的全排列,減去原來那個數,再和那個數進行對比。
好像n超過4就會爆掉。
c語言數字排列問題,C語言數字全排列的問題(急!!)求C程式碼和演算法
include include typedef char array 8 void display rand int i,j int found,r get 50 uniq random numbers for i 0 i 50 i while 1 r rand 50 1 found 0 for j...
PASCAL陣列問題
這是 後面有 的說明 program zhishu const max 50100 var a array 1.max of 0.1 b array 1.2,1.10000 of longint n,i,j,k longint begin assign input,zhishu.in reset i...
組合排列問題問題。數字每組合1次,能組合多少個
先考慮首位,除了0以外的9個數都可以選,所以是c9,1 然後後四位在剩餘的9個數字中選出四個進行全排列,所以是p9,4。所以c9,1 p9,4 27216種。每六個為一組也一樣。先考慮首位,是c9,1 然後後五位在剩餘的9個數字中選出五個進行全排列,所以是p9,5。所以c9,1 p9,5 13608...