1樓:匿名使用者
你以直接求c(n-1,n+m-2).
因為組合數滿足 c[i,j]=c[i-1,j-1]+c[i,j-1]
而本題到達每個方格的方案數有類似的性質,你可以推導一下,但是注意組合數增長的很快,按照資料範圍酌情用int64或高精度
2樓:
表示這個問題 你可以這樣想
一共走的步數是一定的
一共是n+m步
必然n步向下 m步向右
所以最後結果就是c(m+n,n)
然後就去用組合的計算方法計算下就ok
邊乘邊除就ok
手邊沒有編譯器
等下寫好發給你
pascal語言:有2*n的一個長方形方格,用一個1*2的骨牌鋪滿方格。鍵盤輸入任意一個n,輸出共有幾種方法。
3樓:pascal真人
這道題先分析一下:
1個:1種
2個:2種
3個:3種
4個:5種
5個:8種
………………
於是我們就得到了一個規律:a[b]:=a[b-1]+a[b-2];
則:var
a1:longint;
a2,a3,a4,a5:qword;
begin
readln(a1);
case a1 of
1:write(1);
2:write(2);
else begin
a2:=1;
a3:=2;
while a1<>2 do
begin
a1:=a1-1;
a5:=a2+a3;
a2:=a3;
a3:=a5;
end;
write(a3);
end;end.
但是 我們馬上就發現了一個缺點:當資料大於30時就會陣列越界,所以我們要用高精度:
vara1,a2,a3,a4:longint;
a,s,f:array[0..10000] of longint;
begin
readln(a1);
case a1 of
1:write(1);
2:write(2);
else begin
a[10000]:=1;
s[10000]:=2;
while a1<>2 do
begin
a1:=a1-1;
for a2:=10000 downto 1 do
begin
f[a2]:=f[a2]+a[a2]+s[a2];
if f[a2]>9 then begin f[a2-1]:=f[a2] div 10; f[a2]:=f[a2] mod 10; end;
end;
for a2:=1 to 10000 do
begin
a[a2]:=s[a2];
s[a2]:=f[a2];
f[a2]:=0;
end;
end;
for a2:=1 to 10000 do if s[a2]<>0 then break;
for a1:=a2 to 10000 do write(s[a1]);
end;
end;
end.
可以看一下書的 有這個例題
不想留讚的、不贊同的,請給個面子~快點吧
pascal 方格取數
三取方格數(用pascal的)謝謝了,大神幫忙啊
4樓:冥心寶貝
對了哈!數字範圍開的小,你自己改。有點長......
program ex; var data: array[1..10, 0..
10, 0..10, 0..10] of longint; a:
array[1..10, 1..10] of integer; i, j, m, n:
integer; procedure dp(x, y1, y2, y3: integer); var max: longint; begin if (y1 > n) or (y2 > n) or (y3 > n) or ((x > n) and ((y1 <= x - n) or (y2 <= x - n) or (y3 <= x - n))) or (x > m) then begin data[x, y1, y2, y3] :
= 0; exit; end; if data[x + 1, y1, y2, y3] = -1 then dp(x + 1, y1, y2, y3); if data[x + 1, y1 + 1, y2, y3] = -1 then dp(x + 1, y1 + 1, y2, y3); if data[x + 1, y1, y2 + 1, y3] = -1 then dp(x + 1, y1, y2 + 1, y3); if data[x + 1, y1, y2, y3 + 1] = -1 then dp(x + 1, y1, y2, y3 + 1); if data[x + 1, y1 + 1, y2 + 1, y3] = -1 then dp(x + 1, y1 + 1, y2 + 1, y3); if data[x + 1, y1 + 1, y2, y3 + 1] = -1 then dp(x + 1, y1 + 1, y2, y3 + 1); if data[x + 1, y1, y2 + 1, y3 + 1] = -1 then dp(x + 1, y1, y2 + 1, y3 + 1); if data[x + 1, y1 + 1, y2 + 1, y3 + 1] = -1 then dp(x + 1, y1 + 1, y2 + 1, y3 + 1); max := 0; if data[x + 1, y1, y2, y3] > max then max := data[x + 1, y1, y2, y3]; if data[x + 1, y1 + 1, y2, y3] > max then max :
= data[x + 1, y1 + 1, y2, y3]; if data[x + 1, y1, y2 + 1, y3] > max then max := data[x + 1, y1, y2 + 1, y3]; if data[x + 1, y1, y2, y3 + 1] > max then max := data[x + 1, y1, y2, y3 + 1]; if data[x + 1, y1 + 1, y2 + 1, y3] > max then max :
= data[x + 1, y1 + 1, y2 + 1, y3]; if data[x + 1, y1 + 1, y2, y3 + 1] > max then max := data[x + 1, y1 + 1, y2, y3 + 1]; if data[x + 1, y1, y2 + 1, y3 + 1] > max then max := data[x + 1, y1, y2 + 1, y3 + 1]; if data[x + 1, y1 + 1, y2 + 1, y3 + 1] > max then max :
= data[x + 1, y1 + 1, y2 + 1, y3 + 1]; if (y1 = y2) and (y1 = y3) and (y2 = y3) then data[x, y1, y2, y3] := max + a[x - y1 + 1, y1] else begin data[x, y1, y2, y3] := max + a[x - y1 + 1, y1] + a[x - y2 + 1, y2] + a[x - y3 + 1, y3]; if y1 = y2 then data[x, y1, y2, y3] :
= data[x, y1, y2, y3] - a[x - y1 + 1, y1]; if y1 = y3 then data[x, y1, y2, y3] := data[x, y1, y2, y3] - a[x - y1 + 1, y1]; if y2 = y3 then data[x, y1, y2, y3] := data[x, y1, y2, y3] - a[x - y2 + 1, y2]; end; end; begin readln(n); for i:
=1 to n do begin for j:=1 to n do read(a[i, j]); readln; end; m := n * 2 - 1; fillchar(data, sizeof(data), $ff); dp(1, 1, 1, 1); writeln(data[1, 1, 1, 1]); end.
//程式有點長,不過應該是最簡便的,已優化。 //原題是走兩遍,優化後是三維的陣列。你的題是改動過的,改成走三遍,優化後仍是四維陣列。
//所以不要給太大的測試資料,不然記憶體會爆掉。我的陣列開到暫時10,你自己改是注意千萬別 //開太大。
誰能仔細講解一下二分圖匹配?(pascal)
5樓:匿名使用者
假設幾個位置讓幾人坐(一些人只能做固定的位置),就是一次又一次的嘗試,如果位置上沒人,就讓他做那個位置,如果匹配過就嘗試讓原來的座位上的起來去坐其他的位置看能不能坐(這裡的問題就和剛才的問題一樣了,所以用遞迴實現),這樣一層一層的遞迴下去,直到所有的嘗試完,如果可以匹配就會把原來的位置空出來,第一次的就有位置了,如果不行,那就不行,你先找記到裸的匹配題做做吧!(自從我拿一等候就基本上沒碰過了,我沒去noi,憑記憶,不怎麼專業,不求給分,希望對你有些幫助)。
pascal程式設計有趣的數字圖形ii怎麼做
6樓:聽不清啊
var i:integer;
begin
for i:=1 to 8 do
if (i=1)or(i=8)then writeln(' *****')
else writeln(' * *');
end.
圖是matlab程式設計裡的,請問為什麼pascal(4,2)後會出現下面的矩陣
蛇形矩陣 pascal
7樓:匿名使用者
下面給個用陣列求解的思路:
const
max=25; m=5;
vara:array[1..max,1..max] of integer;
i,j,k,t:integer;
begin
t:=1;
for k:=2 to max+1 do
for i:=1 to k-1 do
begin
j:=k-i;
if odd(k) then a[i,j]:=t else a[j,i]:=t;
t:=t+1;
end;
for k:=max+2 to 2*max do
for i:=k-max to max do
begin
j:=k-i;
if odd(k) then a[i,j]:=t else a[j,i]:=t;
t:=t+1;
end;
for i:=1 to max do
begin
for j:=1 to max do write(a[i,j]:4);
writeln;
end;
for i:=1 to max do for j:=1 to max do if a[i,j]=m then begin
writeln(i:4,j:4);
break;
end;
end.
函式f x 2sin wxw0, 0兀2 的部分圖象如下圖所示,該圖象與y軸交
韓增民鬆 函式f x 2sin wx w 0,0 兀 2 的部分圖象如下圖所示,該圖象與y軸交於點f 0,2 與x軸交於點b,c,m為最高點,且 mbc的面積為兀,1 求函式f x 的解析式 2 若f 一兀 4 2 5 5,0,兀 2 求cos 2 十兀 4 的值,1 解析 函式f x 2sin w...
MATLAB中如何畫出x 2 y 2 z 2 1的影象
使用我們初中時候學習的參數列達式,忘記了麼?不管是圓還是球體,都可以使用參數列達式來畫圖。 印子帆 畫完一一半後,再接著畫 x,y sphere 30 z sqrt 1 y.2 x.2 plot3 x,y,z hold on plot3 x,y,z 法一 sphere axis square 法二 ...
圖1表示細胞生物遺傳資訊傳遞某過程,圖2表示DNA結構片段請回答下列問題 (1)在遺傳物質的探索歷程中
血刺代勞 1 艾弗裡體外轉化實驗和噬菌體侵染細菌的實驗的核心設計思路相同,即將dna和蛋白質分開,單獨地 直接地去觀察dna或蛋白質的作用 2 由以上分析可知,圖1表示轉錄過程,該過程中的鹼基配對方式為a u t a c g g c,而圖2的鹼基互補配對方式是a t t a c g g c,可見圖1...