-
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.這個在我的編譯器上是正確的,所以它應該是正確的。
-
其實讓別人教標準課程是很無聊的。
自己動手也不錯!
只是時間會超過!
-
通過置換和組合功能來編寫程式;
-
首先檢查序列 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
-
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.基數排序。
想法:將每個元素從低到高排序一次。
-
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.第二個問題很容易在網上找到。
-
默然。 沒有資料範圍? 然後冒泡,只有兩條線**。
-
有乙個有序資料序列,需要在這個已經排列好的資料序列中插入乙個數字,但資料序列在插入後仍然是有序的,這時就用上了一種新的排序方式——插入排序法,插入排序的基本操作是將乙個資料插入到已經排序好的有序資料中, 為了得到新的數加一階資料,該演算法適用於少量資料的排序,時間複雜度為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 將最後乙個元素插入到訂單的第一部分。
-
就是構建乙個陣列,每次讀取乙個數字,都會從陣列的第一位到最後一位進行搜尋,並插入到適當的位置。
例如,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.
function jia(s1,s2:ansistring):ansistring;
var i,j,l1,l2:longint; >>>More
1.要確定 a 是否能被 b 整除,只要 a 的餘數除以 b = 0,那麼它就可以被 b 整除。 否則,輸出 a、除法、b、等號、商(可用可整除函式 div 整除),然後使用 a-b* 商。 >>>More