返回首页

稀疏矩阵pascal

210 2023-08-02 21:40 admin

一、稀疏矩阵pascal

var i,j,k:longint;

begin

while not eof do

begin

 i:=i+1;

while not eoln do

begin

j:=j+1;

read(k);

if k<>0 then writeln(i,j,k);

end;

end;

end.

二、高精度乘法多位乘一位PASCAL

var s:array[1..100] of integer;

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

o:boolean;

begin

readln(n); s[100]:=1;

for i:=1 to n-1 do begin

for j:=100 downto 1 do begin

s[j]:=s[j]*2+k;

if s[j]>9 then begin k:=s[j] div 10; s[j]:=s[j] mod 10; end else k:=0;

end;

end;

for i:=100 downto 1 do

if s[i]>9 then

begin

s[i-1]:=s[i-1]+s[i] div 10;

end;

o:=false;

for l:=1 to 100 do

if (s[l]<>0)or o then begin write(s[l] mod 10); o:=true; end;

writeln; readln;

end.

输入输出样例:

输入:3 {2的2次方}

输出:4 {2的2次方的结果}

输入:100 {2的99次方}

输出: {2的99次方的结果}

三、Pascal 高精度计算

VAR A,B,C:ARRAY[1..10000] OF INTEGER;

K,LA,LB,LC,I,J,W,X,CODE:INTEGER;

S,M,N,P1:LONGINT;

P,O,Q:STRING;

BEGIN

READLN(M);

FOR N:=1 TO M DO

BEGIN P:='1';

FOR K:=1 TO N DO

BEGIN

STR(K,O);LA:=LENGTH(O);LB:=LENGTH(P);LC:=LA+LB;

FOR I:=1 TO LA DO VAL(O[LA+1-I],A[I],CODE);

FOR I:=1 TO LB DO VAL(P[LB+1-I],B[I],CODE);P:='';

FOR I:=1 TO LA DO FOR J:=1 TO LB DO

BEGIN W:=I+J-1;

X:=A[I]*B[J];C[W]:=C[W]+X MOD 10;

C[W+1]:=C[W+1]+C[W] DIV 10+X DIV 10;

C[W]:=C[W] MOD 10;

END;

WHILE (C[LC]=0) AND (LC>1) DO LC:=LC-1;

FOR I:=1 TO LC DO BEGIN

STR(C[I],Q);P:=Q+P;C[I]:=0;

END;

END;

VAL(P,P1,CODE);S:=S+P1;

END;

WRITE(S);

END.

这可是我辛辛苦苦写出来的,可别忘了给我加分哦。^_^

四、Counting Triangles和字符串逆转 pascal

Counting Triangles:

var i,j,t,n:longint;

begin

readln(n);t:=1;j:=4;

for i:=2 to n do begin

t:=t+j;j:=j*4;

end;

writeln(t);

end.

字符串逆转:

var l,n,i,j:longint;s:ansistring;

begin

readln(n);for i:=1 to n do

begin

readln(l);readln(s);

write('Num ',i,':');

for j:=l downto 1 do write(s[j]);

end;

end.

五、把数从小到大排序 pascal

首先你要这种题我们需要比较类型的排序:冒泡、插入、选择、快排、堆排。

时间上最好的是堆排,但是比较难写,前面三种又相比好写,但是慢了点,快排是当今世界上期望时间复杂度,算上编程复杂度最好的一种比较排序算法,期望时间复杂度为O(nlogn),一般快排我选择二分,因为随机排我有一次伤心了- -产生随机数的时间也不能忽视,而且期望时间一点都达不到。。。

这道题我们在比较的时候有一个优先级,a的优先级比b的高,代码如下:

Procedure Qsort(l,r:longint);

var

    i,j,mid1,mid2:longint;

begin

    i:=l;  j:=r;

    mid1:=a[(l+r) div 2];  mid2:=b[(l+r) div 2];

    repeat

    while (a[i]<mid1) or (a[i]=mid1) and (b[i]<mid2) do inc(i);

    while (a[j]>mid1) or (a[j]=mid1) and (b[j]>mid2) do dec(i);

    if i<=j then

    begin

    swap(a[i],a[j]);  //swap自己写个交换程序吧,你懂得,记得定义的时候是procedure swap(var x,y:longint);

    swap(b[i],b[j]);

    end;

    until i>j;

    if i<r then qsort(i,r);

    if l<j then qsort(l,j);

end;  {Qsort}

排序程序代码如上,主程序自己搞定吧,根据这个你可以试试字符串排序,因为字符串各个字母也是有优先级的,自己钻研。