一、稀疏矩阵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}
排序程序代码如上,主程序自己搞定吧,根据这个你可以试试字符串排序,因为字符串各个字母也是有优先级的,自己钻研。