|
|
|
综合练习二 |
|
一、看程序写结果
1.
var w:string;pd:boolean;
wl:array[1..100] of string[20];temp:string[20];
i,j,k,l:integer;
begin
readln(w);
i:=1;k:=0;
while i<=length(w) do
if w[i] in ['a'..'z','A'..'Z'] then
begin
j:=1;
repeat
temp[j]:=upcase(w[i]);
i:=i+1; j:=j+1
until not (w[i] in ['a'..'z','A'..'Z']);
temp[0]:=chr(j-1);
pd:=true;
for l:=k downto 1 do
if wl[l]=temp then pd:=false;
if pd then begin k:=k+1;wl[k]:=temp end
end
else
while not(w[i] in ['a'..'z','A'..'Z']) do
i:=i+1;
writeln('the number of word is:',k);
end.
输入:The book is yours, that book is his, where is my book? There it is.
输出:
2.
var a,b,c:array[1..201] of char;
s1,s2:string;
l1,l2,i,j,k,hejinwei,he,jijinwei,ji:byte;
begin
fillchar(a,201,'0');fillchar(b,201,'0');
fillchar(c,201,'0'); {将c数组的每个元素都置为'0'}
readln(s1); readln(s2);
l1:=ord(s1[0]);l2:=ord(s2[0]);
for i:=1 to l1 do a[i]:=s1[l1-i+1];
for i:=1 to l2 do b[i]:=s2[l2-i+1];
for i:=1 to l2 do
begin
jijinwei:=0;hejinwei:=0;
for j:=1 to l1 do
begin
ji:=(ord(b[i])-ord('0'))*(ord(a[j])
-ord('0'))+jijinwei;
jijinwei:=ji div 10;
he:=(ord(c[j+i-1])-ord('0'))+ji mod
10+hejinwei;
c[j+i-1]:=chr(he mod 10+ord('0'));
hejinwei:=he div 10
end;
he:=(ord(c[l1+i])-ord('0'))+hejinwei+jijinwei;
jijinwei:=0;
c[l1+i]:=chr(he mod 10+ord('0'));
end;
i:=201;
while c[i]='0' do i:=i-1;
for j:=i downto 1 do write(c[j]);
writeln
end.
输入:11111111111111115 输出:
22
二、填空题:请将每空的正确答案写在横线上
问题描述:将n个整数分成k组(k≤n,要求每组不能为空),显然这k个部分均可得到一个各自的和s1,s2,……sk,定义整数P为:
P=(S1-S2)2+(S1一S3)2+…+(S1-Sk)2+(s2-s3)2+…+(Sk-1-Sk)2
问题求解:求出一种分法,使P为最小(若有多种方案仅记一种〉
程序说明:
数组:a[1],a[2],...A[N]存放原数
s[1],s[2],...,s[K]存放每个部分的和
b[1],b[2],...,b[N]穷举用临时空间
d[1],d[2],...,d[N]存放最佳方案
program chu8-4;
Var i,j,n,k : integer;
a :array [1..100] of integer; b,d:array [0..100] of integer; s :array[1..30] of integer;
begin
readln(n,k);
for I:=1 to n do read(a[I]);
for I:=0 to n do b[I]:=1;
cmin:=1000000;
while (b[0]=1) do
begin
for I:=1 to k do ①
for I:=1 to n do
②
sum:=0;
for I:=1 to k-1 do
for j:= ③
sum:=sum+(s[I]-s[j])*(s[I]-s[j]);
if ④ then
begin
cmin:=sum;
for I:=1 to n do d[I]:=b[I];
end;
j:=n;
while ⑤ do j:=j-1;
b[j]:=b[j]+1;
for I:=j+1 to n do ⑥
end;
writeln(cmin);
for I:=1 to n do write(d[I]:40);
writeln;
end.
三、编写程序
1.编程将自然数按下图所示的次序依次存放到一个N×N的二维数组中。下图描述了N=5时各个元素的值及其赋值次序。输出时只要输出各元素的值。
1→ 2 9→10 25
↓ ↑ ↓ ↑
4← 3 8 11 24
↓ ↑ ↓ ↑
5→ 6 → 7 12 23
↓ ↑
16←15 ← 14← 13 22
↓ ↑
17→18 → 19→ 20→21
2.从文件ex1.in中读入一组数据,将该组数据中的最大值输出到文件ex1.out中。(提示:注意ex1.in的格式)
存储文件名:ex1.pas
3.在程序中设计一个函数,该函数返回布尔值判别输入的三个字符是按序或无序排列。程序中若输入abc则显示顺序排列,若输入cba则显示逆序排列,其他情况显示无序排列,当输入***程序结束。示例:
输入:abc
屏幕显示:shu xu
输入:rda
屏幕显示:nu xu
输入:sbh
屏幕显示:wu xu
…… ——可以反复地做下去
输入:***
存储文件名:ex2.pas
4.输入一个字符串,对字符串进行插入I,删除D,替换R的处理。当输入Q则退出处理,程序停止执行。具体操作如下:
输入一个字符串s;
输入一个操作符:
若输入I,则必需跟着一个数d和一个字符c,表示在字符串s的第d个位置后插入一个字符c;
若输入D,则必需跟着一个字符c,表示将字符串s中的所有字符c都删去;
若输入R,则必需跟着两个字符c1和c2,表示将字符串s中的所有字符c1都替换为c2;
若输入Q,则表示结束返回。
示例:
输入:asdfaab
输入:I
输入:3
输入:q
屏幕显示:asdqfaab
输入:R
输入:a
输入:b
屏幕显示:bsdqfbbb
输入:I
输入:2
输入:b
屏幕显示:bbsdqfbbb
输入:D
输入:b
屏幕显示:sdqf
输入:Q
|
|