-
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