算法习题及解答 下载本文

getnum(i+1); end; end; end;

begin

assign(input,'SRAMOC.DAT'); assign(output,'SRAMOC.OUT'); reset(input); rewrite(output); read(k );

read(m); test:=false; l:=1;

if m

n:=m; end else begin

l:=0;

while not test do begin

l:=l+1; getnum(1); end; end;

write(n); close(input); close(output); end. 269

、顺序数串无穷小数

小明构造了一个无穷小数x=0.1234567891011?9899100101?,其中的数字是依次写下各自然数而得到的。试求出小数点后第m位数字。 输入:文件中每行有一个整数m( m<=20000)。 输出:输出文件中每行有一个数字,存放着小数点后第m位数字。 2 var

m,n:integer;

function mexp(a:integer):l ongint; var

i:integer; t:longint; begin

t:=1;

for i:=1 to a do begin

t:=t*10; end; mexp:=t; end;

function mstr(x:integer):string;

var

ms:string; begin

str(x,ms); mstr:=ms; end;

procedure writeret(n:integer); var

i,r:integer; x:longint; s:string; begin

i:=-1;

while n>0 do begin

i:=i+1;

n:=n-9*mexp(i); end;

n:=n+9*mexp (i);

if n mod (i+1)=0 then r:=i+1 else

r:=n mod (i+1); x:=(n-r) div (i+1); s:=mstr(x+mexp(i)); s:=copy(s,r,1); writeln(s); end;

begin

assign(input,'c:\\input.txt'); assign(output,'c:\\output.txt'); reset(input); rewrite(output); while not eof do begin

readln(m); writeret(m); end;

close(input); close(output); end. 270

、NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例: 4+3x=8

6a-5+1=2-2a -5+12y=0

ZL先生被主管告之,在计算器上键入的一个一元一次方程中,只包含整数、小写字母及+、-、=这三个数学符号(当然,符号“─”既可作减号,也可作负号)。方程中并没有括号,也没有除号,方程 中的字母表示未知数。

问题求解

编写程序,解输入的一元一次方程, 将解方程的结果(精确至小数点后三位)输出至屏幕。 你可假设对键入的方程的正确性的判断是由另一个程序员在做,或者说可认为键入的一元一次方程均为合法的,且有唯一实数解。 样 例 输入:

6a-5+1=2-2a 输出:

a=0.750

275、问题描述:

给出n个整数x1,x2,x3,x4..xn,将这n个数从小

到大排序为:A1,A2,A3,A4..AN,记数列A1,A2,A3,A4..AN的奇数项之和为P,偶数项之和为Q,令T=|P-Q| 求出T的值。 输入格式:

输入文件的第一行为整数N(1<=n<=50000)。

接下来的N行每行有一个整数,按顺序给出X1,X2,X3,..XN的值(|Xi|<=1000) 输出格式:

输出整数T的值。 输入样例: 3 1 3 2

输出样例: 2 var

x:array [1..50000] of integer; n,t,i,q,p:inte ger;

procedure pailie(); var

m,l,t:integer; begin

for m:=n-1 downto 1 do begin

for l:=1 to m do begin

if x[l]>x[l+1] then begin

t:=x[l];

x[l]:=x[l+1]; x[l+1]:=t; end; end; end; end;

procedure add(); begin

p:=0; q:=0;

for i:=1 to n do

begin

if i mod 2=0 then q:=q+x[i] else

p:=p+x[i]; end; end;

begin

assign(input,'c:\\input.txt'); assign(output,'c:\\output.txt'); reset(input); rewrite(output); readln(n);

for i:=1 to n do begin

readln(x[i]); end;

pailie(); add();

if q>p then

write(q-p) else

write(p-q);

close(input);

close(output); End.

276、破碎的项链

问题描述:你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的。 这里是 n=29 的二个例子:

1 2 1 2 r b b r b r r b r b b b

r r b r r r w r b r w w b b r r b b b b b b r b r r b r b r r r

b r r r

r r r b r b r r r w 图片 A 图片 B

r 代表 红色的珠子 b 代表 蓝色的珠子

w 代表 白色的珠子 第一和第二个珠子在图片中已经被作记号。 图片 A 中的项链可以用下面的字符串表示: brbrrrbbbrrrrrbrrbbrbbbbrrrrb.

假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇