PASCAL全置換程式

發布 科技 2024-02-21
9個回答
  1. 匿名使用者2024-01-25

    program sou1;

    var a:array[1..100]of integer;n,i,x:integer;s:set of 1..100;

    beginreadln(n);

    i:=1;a[i]:=0;s:=;

    repeat

    repeat

    inc(a[i]);

    until not(a[i]in s)or(a[i]>n);

    if a[i]>n then begin i:=i-1;s:=s-[a[i]];end

    else begin

    s:=s+[a[i]];

    if i=n then begin for x:=1 to n do write(a[x]);writeln;s:=s-[a[i]];end

    else begin i:=i+1;a[i]:=0; end;

    end; until i<1;

    end.這個在我的編譯器上是正確的,所以它應該是正確的。

  2. 匿名使用者2024-01-24

    其實讓別人教標準課程是很無聊的。

    自己動手也不錯!

    只是時間會超過!

  3. 匿名使用者2024-01-23

    通過置換和組合功能來編寫程式;

  4. 匿名使用者2024-01-22

    首先檢查序列 m,mi<=m(i+1),否則為 0。

    那麼,只要確定 s1,就可以確定整個序列。

    然後先找到乙個符合要求的s序列,注意s1<=m1 2,這樣從小數(-10 9一定夠了,可以再研究一次)到m1 2(或m1 2-1 2),用二進位搜尋找到乙個有效的s1。

    至於直接 s1=m1 2(或 m1 2-1 2)是否屬實,尚不確定,似乎也不是真的。

    簡而言之,首先找到乙個有效的 s 序列。

    以下 k 為正整數)。

    然後,用調整的想法來考慮它。

    1) 如果 S1 加 1,則 S2 減去 1,S3 加 1,S4 減去 1,S5 加 1。

    那麼 s(k*2-1) 越來越接近 s(k*2),當它們彼此相等或相等時,它們就無法進一步調整,最小值 s(k*2)-s(k*2-1) 和 div 2 是 s1 加 1 的次數。

    此限制設定為 a1

    2) 如果 s1 為負 1,則。

    這一次,s(k*2) 和 s(k*2+1) 確定數量限制,思路是一樣的,得到 a2 是好的,現在,有乙個可行的 s 序列,s1 增加有 a1 種,s1 減少有 a2 種。

    總數是,a1+1+a2

  5. 匿名使用者2024-01-21

    1.快速排序:

    procedure qsort(l,r:integer);

    var i,j,mid:integer;

    begini:=l;j:=r; mid:=a[(l+r) div 2];

    repeat

    while amid do dec(j);

    if i<=j then begin

    swap(a,a[j]);

    inc(i);dec(j);

    end;until i>j;

    if la[j] then swap(a,a[j]);

    end;d.冒泡分揀。

    procedure bubble_sort;

    var i,j,k:integer;

    beginfor i:=1 to n-1 do

    for j:=n downto i+1 doif a[j]r) or (a<=a[j]))then begin

    tmp[t]:=a; inc(i);

    endelse begin

    tmp[t]:=a[j];inc(j);

    end;inc(t);

    end;for i:=p to r do a:=tmp;

    end;procedure merge_sort(var a:listtype; p,r: integer);

    var q:integer;

    beginif p<>r then begin

    q:=(p+r-1) div 2;

    merge_sort (a,p,q);

    merge_sort (a,q+1,r);

    merge (a,p,q,r);

    end;end;

    beginmerge_sort(a,1,n);

    end.g.基數排序。

    想法:將每個元素從低到高排序一次。

  6. 匿名使用者2024-01-20

    vara:array[0..10001] of longint;

    n,i,j,k,ans:longint;

    beginreadln(n);

    for i:=1 to n do

    read(a[i]);

    for i:=1 to n do

    for j:=1 to n-1 do

    if a[j]>a[j+1] then

    begink:=a[j];

    a[j]:=a[j+1];

    a[j+1]:=k;

    inc(ans);

    end;writeln(ans);

    end.第二個問題很容易在網上找到。

  7. 匿名使用者2024-01-19

    默然。 沒有資料範圍? 然後冒泡,只有兩條線**。

  8. 匿名使用者2024-01-18

    有乙個有序資料序列,需要在這個已經排列好的資料序列中插入乙個數字,但資料序列在插入後仍然是有序的,這時就用上了一種新的排序方式——插入排序法,插入排序的基本操作是將乙個資料插入到已經排序好的有序資料中, 為了得到新的數加一階資料,該演算法適用於少量資料的排序,時間複雜度為O(N 2)。是一種穩定的排序方法。 插入演算法將要排序的陣列分為兩部分:

    第一部分包含陣列的所有元素,但最後乙個元素除外,第二部分僅包含這乙個元素。 對第一部分進行排序後,插入排序將按公升序排序。

    procedure insertsort(var r : filetype);

    至 r[1..n]、r[0] 是監視哨

    beginfor i := 2 到 n do insert r[2], .,r[n]//

    beginr[0] := r[i]; j := i - 1;

    while r[0] beginr[j+1] := r[j];向後移動大於 r[i] 的元素。

    j := j - 1

    endr[j + 1] := r[0] ;插入 r[i]。

    endend;InsertSort 將最後乙個元素插入到訂單的第一部分。

  9. 匿名使用者2024-01-17

    就是構建乙個陣列,每次讀取乙個數字,都會從陣列的第一位到最後一位進行搜尋,並插入到適當的位置。

    例如,2 5 3 7 4

    A**(直接插入排序):

    vara:array[1..1000] of integer;

    i,j,k,n,m:integer;

    beginreadln(n);

    read(a[1]);

    for i:=2 to n do

    beginread(k);

    j:=1;while (k>a[j])and(j<=n) do j:=j+1;

    for m:=n downto j do a[m+1]:=a[m];

    a[j]:=k;

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

    readln;readln;

    end.

相關回答
6個回答2024-02-21

function jia(s1,s2:ansistring):ansistring;

var i,j,l1,l2:longint; >>>More

9個回答2024-02-21

1.要確定 a 是否能被 b 整除,只要 a 的餘數除以 b = 0,那麼它就可以被 b 整除。 否則,輸出 a、除法、b、等號、商(可用可整除函式 div 整除),然後使用 a-b* 商。 >>>More

18個回答2024-02-21

1.隨機生成:random表示隨機,如random(100); 指隨機生成 0 99 的整數。 >>>More

2個回答2024-02-21

它通常是用倒置陣列完成的。

樓上的精度不高。 >>>More

17個回答2024-02-21

如果你不同意樓上,那是因為你的水平不好,而不是你不能廣泛搜尋。 >>>More