1. 求出所有满足下列条件的二位数:将此二位数的个位数字与十位数字进行交换,可得到一个新的数,要求新数与原数之和小于100。
程序要求:每行输出6个满足条件的数。
[算法提要]
分解每一个二位数,然后重新组成一个新数,当满足条件时,用计数器来统计个数。
程序:
K := 0;
FOR i := _____for i:=10 to 99 do____ TO 99 DO
X := ____x:=i mod 10;_____; Y := ____y:=i div 10;_____;
J := x * 10 + y;
IF ____If (i+j)<100_____ THEN
K := k + 1;
Write(I : 4);
______ if k mod 6=0_____ THEN WRITELN;
ENDIF
ENDFOR;
2. 找出小于33的6个正整数,用这些整数进行加法运算,使得包括原来的整数在内能组成尽可能多的不同整数。
例如:用2,3,5这三个数能可组成下面的数
2, 3, 5
2 + 3 = 5, 但5已经存在
2 + 5 = 7, 3 + 5 = 8, 2 + 3 + 5 = 10
所以用2,3,5能组成6个不同的数。
程序要求:输出所选的这6个数,以及能组成不同整数的个数。
[算法提要]:选择的这6个数,用来组成数时应该尽可能不重复,引入数组A保存找出的这6个整数。
程序:
A[1] := 1; t := 0;
For i := 2 to 6 do
_____s:=0;____;
for j := 1 to i - 1 do
s := ______ s:=s+a[j];_______;
ENDFOR;
a[i] := _______ a[i]:=s+1_______;
ENDFOR;
FOR i:=1 TO 6 DO
T := ______ t:=t+a[i]; 或t:=t*2+1______ WRITE(a[i], ' ');
ENDFOR;
Writeln('能组成不同整数的个数:', t)
End.
3. 求出2~1000之间长度最长的、成等差数列的素数(质数)。
例如:在2~50之间的全部素数有
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47
其中公差为1的素数数列为2, 3,其长度为2
公差为2的素数数列为3, 5, 7,其长度为3
……
程序要求:输出满足条件的素数数列。
[算法提要]:首先用筛选法求出此范围内的全部素数,存放在数组B中,然后用2个变量i,j,逐步求出满足条件的素数数列。
程序:
Max := 0; num := 1000;
For i := 2 to num do
b[i] := i;
ENDFOR
For i := 2 to ______① for i:=2 to num-1 do 或for i:=2 to sqrt(num)do______ do
If ______if b[i] <>0_____ then
k := i + i;
While k <= num do
B[k] := 0;
K := k + i
ENDWHILE;
ENDIF;
ENDFOR;
For i := 2 to num - 1 do
If ________if b[i]<>0_________ then
J := 1;
D[j] := b[i];
For i1 := __________for i1:=i+1 to ____________ do
If b[i1] <> 0 then
Delta := ________num do _______;
k := delta;
While (i+k<=num)and ______delta:=i1-i; 或delta=b[i1]-b[i]______ do
j := j + 1;
d[j] := i + k;
k := k + delta
ENDWHILE;
If j > max then begin
Max := j;
C :=d //数组D的每个元素值
分别送放数组C的相应
元素中去//
ENDIF;
J := 1
ENDIF;
ENDFOR;
ENDIF;
ENDFOR;
writeln('The max length is: ', max);
write('The string is: ');
for i := 1 to max do write(c[i],' ');
writeln
ENDFOR;
4. 求出二个整形数组错位相加的最大面积。
1.数组面积的定义:(限定数组头尾不为0)
设有一个数组C=(4,8,12,0,6)
则C的面积为:
Sc=(4+8)/2 + (8+12)/2 + 12/2 + 6/2
也就是说,Sc=各梯形面积之和(其中梯
形的高约定为1,三角形作为梯形的特殊情况
处理)。
又如D=(12, 24, 6)时,其面积的定义为Sd=(12+24)/2 + (24+6)/2
2.数组错位相加的定义
设有2个正整数的数组a,b,长度为n,当n=5时:
a=(34,26,15,44,12) b=(23,46,4,0,18)
对a、b进行错位相加,可能有下列情况
34 26 15 44 12
+) 23 46 4 0 18
34 26 15 44 12 23 46 4 0 18
或:
34 26 15 44 12
+) 23 46 4 0 18 -
34 26 15 44 35 46 4 0 18
或:
34 26 15 44 12
+) 23 46 4 0 18
34 26 15 67 58 4 0 18
或:……
最后有:
34 26 15 44 12
+) 23 46 4 0 18 -
23 46 4 0 18 34 26 15 44 12
可以看到:由于错位不同,相加的结果也不同。
程序要求:找出一个错位相加的方案,使得输出的数组面积为最大。
[算法提要]: 设a,b的长度为10,用a,b: array[1..10] of integer表示,其结果用数组C,D: array[1..30] of integer表示。
错位相加的过程可以从开始不重叠,然后逐步重叠,再到最后的不重叠。
梯形面积的计算公式为:(上底+下底)×高÷2
其中由于约定高为1,故可写为(上底+下底)÷2。
程序:
n = 10;
…… Function sea : real; {计算数组C面积}
Begin
J1 := 1;
While __c[j1]=0 and j1<3*n__ do
j1 := j1 + 1;
ENDWHILE;
If j1 = 3 * n then sea := 0
Else begin
J2 := 3 * n;
While ___c[j2]=0 and j2>j1__ do
j2 := j2 - 1;
If j1 = j2 then sea := 0
Else begin
J3 := c[j1] + c[j2];
For j4 := j1 + 1 to j2 - 1 do
INC(j3,c[j4]*2);
ENDFOR;
Sea := j3 / 2
end
ENDIF;
End;
//主程序//
For i := 1 to n do read(a[I]); endfor;
For j := 1 to n do read(b[j]); endfor;
__s:=0;__;
for i := 1 to 2 * n + 1 do
for j := 1 to 3 * n do _c[j]:=0;__ endfor;
for j := 1 to n do c[j + n] := a[j] endfor;
for j := 1 to n do
_c[i+j-1]:=c[i+j-1]+b[j]__;
endfor;
p := sea;
if p > s then begin
d := c;
s := p
end;
endif;
endfor;
for I := 1 to 3 * n do write(d[I],' '); endfor;
write(s);
End. //主程序结束//