在pascal中,輸入n,打出n階幻方的任意一種排列

2025-01-11 23:10:12 字數 3959 閱讀 3509

1樓:想不出起啥名嘞

是只要有就行還是所有的都能生成?

2樓:古惑仔

請參考寧波市第26屆中小學生程式設計競賽初賽完善程式第一題。

3樓:天涯冰雪蘭花

簡單,你如果只要一種解而非所有解,那麼用回溯法吧,奇偶階都能很快得出答案。如果要搜盡全部解,4階的,我耗費了幾分鐘,而5階電腦就受不了,6階的估計超級計算機也無能為力,呵呵。

4樓:網友

幻方有專門的構造方法,樓上的回溯法是不可行的,我也寫過幻方的程式(c++)10000階以內時間都不超過1s演算法在這裡。

pascal 由鍵盤上輸入任意n個一位數數輸出它的全排列

5樓:

汗……樓上的太有才了!

const n=5;

varx:array[1..10] of integer;

y:array[1..10] of boolean;

procedure outit;

var i:integer;

beginfor i:=1 to n dowrite(x[i]);

writeln;

end;procedure search(v:integer);

var i:integer;

beginif v>n then begin outit;exit;end;

for i:=1 to n do

if y[i] then

begin x[v]:=i;y[i]:=false;search(v+1);y[i]:=true;end;

end;begin

fillchar(y,sizeof(y),true);

search(1);

end.說明:使用非遞迴的好處是節約記憶體,當一些題目對記憶體消耗較大時,建議使用非遞迴方式;但使用遞迴方式在程式執行時間上要好一些,因為在每個節點擴充套件時,遞迴方式少乙個範圍超界判斷。

pascal 奇數階幻方

6樓:jackson王子

varx,y,z,m,n,i,j:integer;

a:array[1..1000,1..1000] of integer;

beginreadln(m);

if m mod 2=1 then

beginn:=(m div 2)+1;

for i:=1 to m do

beginfor j:=1 to m doa[i,j]:=0;

end;i:=1+1;j:=n+1;y:=1;

for z:=1 to m*m do

begini:=i-1;j:=j-1;

if i=0 then

begini:=m;

end;if j=0 then

beginj:=m;

end;if a[i,j]<>0 thenbegini:=i+2;

j:=j+1;

if i>m then

i:=i-m;

if j>m then

j:=j-m;

end;a[i,j]:=y;

y:=y+1;

end;end;

for i:=1 to m do

beginfor j:=1 to m dowrite(a[i,j]:5);

writeln;

end;readln;

end.我試過了,可以的。(但只限於邊長為奇數)

7樓:網友

告訴你解題思想吧!

1總是放在最後一行的中間乙個數。

接下來每個數都是在上乙個數的斜上方(如果那個位置有數則放在前乙個數的上方)

不懂的話用九宮格來實驗吧。

求解pascal全排列題目:題目輸入n,然後把n個1和n個2全排列出來,求解。。有滿意答案++分

8樓:網友

已寫好,並經過除錯無誤。

n階魔方陣 pascal

9樓:

不就是馬鞍數嗎?

program maths;

type nbt=array [1..n] of integer;

vara:array [1..n,1..n] of integer;

b,c:nbt;

i,j:integer;

beginfor i:=1 to n do

beginfor j:=1 to n do

read(a[i,j]);

b[i]:=-32768;

c[i]:=32767;

end;for i:=1 to n do

for j:=1 to n do

beginif a[i,j]>b[i] then b[i]:=a[i,j];

if a[j,i]end;

for i:=1 to n do

for j:=1 to n do if b[i]=c[j] then write(i,j);

end.這是我的創新思維,比書本上的好(自認)

還不錯吧。

pascal n個數的r個數的組合

10樓:網友

const

maxn=10;//n的最大值。

varn,r,tot:longint; //如果n和r的值再大一點的話,你應該考慮用高精。

ans:array[1..maxn] of longint; //記錄每個組合。

procedure dfs(k,p:longint); //k是當前遞迴的層數,p是當前數可以取到的最小值,這裡p是為了防止重複。

var i:longint;

beginif k=r+1 then begin //如果已經找到了r個數,輸出組合方案並退出本層遞迴。

inc(tot); //組合數個數加一。

for i:=1 to r-1 do write(ans[i],' ');

writeln(ans[r]);

exit;end;

for i:=p downto 1 do begin //如果還沒有找到r個數,找乙個可以選的數選擇,並進入下一層遞迴。

ans[k]:=i;

dfs(k+1,i-1); //進入下一層遞迴,為避免重複,下一層不能選擇之前的層選擇過的數。

end;end;

beginreadln(n,r);

dfs(1,n);

writeln('total=',tot);

end.

o(n) 的排序 pascal

11樓:網友

有的乙個比較猥瑣的排序法,比選擇排序和快速排序要快一些,但必須是已知資料範圍的情況下才可以行的排序,**如下:

varn,i,j,num:longint;

a:array[1..100000] of longint;

beginreadln(n);

fillchar(a,sizeof(a),0);

for i:=1 to n do beginread(num);

inc(a[num],1);

end;for i:=1 to 100000 doif a[i]>0 then

for j:=1 to a[i] do

write(i:4);

end.望!

12樓:網友

沒有。對所有資料都可以的效率最快只有nlongn,已知最快的是快速排序。

13樓:網友

除了桶排序,還有計數排序,時間複雜度可以是o(n)

14樓:網友

樓上的打錯字了。排序的時間複雜度下限就是nlogn,除了桶排,最快的就是nlogn的。

如何證明在n階行列式d中,若數多於n2n則d

你好 行列式一共有n2個元素,所以非0元素個數少於n個,至少有一行元素為0 否則,每行乙個非0元素就有n個非0元素了 所以行列式是0。經濟數學團隊幫你解答,請及時採納。謝謝 若0個數多於n2 n則行列式至少有一行或一列全為0定理 至少有一行或一列的元素全為0的行列式等於0 若n階行列式d中非零元素的...

函式在x點存在n階導數,則n 1階導函式在x的領域內有定義嗎

因為 f 在點 x 的 n 階導數定義為 f n x lim h 0 f n 1 x h f n 1 x h,當然需要在x的某一鄰域內一定具有 n 1 階的導數。為什麼函式在x處可以取到n階導數,必有函式在x的鄰域內取到n 1階導數 函式在點x處具有n階導數,則函式在x的某一鄰域內一定具有一切低於n...

線性代數中 n階方陣aka k的n次方a(k是常數

兔老大米奇 ka k的n次方 a k的n次方 a的n 1次方 a 為a伴隨方陣 a a的n 1次方書上有公式可以取巧求出 a 具體公式見 由a 1 a a e 得 1 a a e a 得 1 a a 1 a 得 1 a 的n次方 a 1 a 得 a a的n 1次方。擴充套件資料線性代數的定義 函式研...