算法习题及解答 下载本文

begin

m:=1; y:=y+1; end; end; exit; end;

if (y mod 4=0)and(m=2) then begin

flag:=29; en d

else begin

case m of

1,3,5,7,8,10,12:flag:=31; 4,6,9,11:flag:=30; 2:flag:=28; end; end;

if d>flag then begin

d:=1; m:=m+1;

if m=13 then begin

m:=1; y:=y+1; end; end; end;

begin

assign(input,'BIRTHDAY.DAT'); assign

(output,'BIRTHDAY.OUT'); reset(input); rewrite(output); read(y); read(m); read(d);

for i:=1 to 10000 do begin

incdate(); end;

write(y,'-',m,'-',d); close(input); close(output); end.

265、 分解因式 ( Factor ) 问题描述:

一个自然数N的正因子个数记为F(N),例如18的所有正因子为1、2、3、6、9、18,所以F(18)=6。现在给出K,求所有满足F(N)=K的N中最小的数。

输入格式:

从文件读入数据,第一行为K,其中0

输出格式:

输出到文件第一行,如果存在不大于20000的解,则输出这个N,否则输出“NO SOLUTION”。

样例1:

FACTOR.DAT FACTOR.OUT 9样例2:

FACTOR.DAT FACTOR. var

i:longint; n:integer;

function getfactor(x:longint):integer; var

m:longint; r:integer; begin

r:=0;

for m:=1 to x do begin

if x mod m=0 then r:=r+1; end;

getfactor:=r; end;

begin

assign(input,'FACTOR.DAT'); assign(output,'FACTOR.OUT'); reset(input); rewrite(output); read(n);

for i:=1 to 20000 do begin {writeln(i);}

if getfactor(i)=n then begin

write(i); close(input); close(output); halt; end; end;

write('NO SOLUTION'); close(input); close(output); end. 266

、 K好数(K-Good Number) 问题描述:

如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。给定K、L,求L位K好数的数目。

输入格式:

从文件读入数据,第一行为K、L,其中K<=16,L<=10。

输出格式:

将结果输出到 KGOOD.OUT 样例

KGOOD.DAT KGOOD.OUT 4 2 7 var

k,l,n:integer;

a:array [1..16] of integer; test:boolean;

procedure getnum(i:integer); var

m,j,s:integer; begin

if i=1 then s:=1 else

s:=0;

for m:=s to k-1 do begin

a[i]:=m; if i=l then begin

test:=true;

for j:=1 to l-1 do begin

if (a[j]-a[j+1])*(a[j]-a[j+1])=1 then begin

test:=false; end; end;

if test then begin

n:=n+1; end; end else begin

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

begin

assign(input,'KGOOD.DAT'); assign(output,'KGOOD.OUT');

reset(input);

rewrite(output); read(k); read(l);

for n:=1 to l do begin

a[n]:=0; end; n:=0;

getnum(1); write(n); close(input); close(output); end.

267、Sramoc问题 ( Sramoc Problem ) 问题描述:

Sramoc ( K , M ) 表示用数字0、1、2?、K-1组成的自然数中能被M整除的最小数。给定 K、M,求Sramoc ( K,M )。例如 K=2,M=7的时候,Sramoc( 2 , 7 ) = 1001。

输入格式:

从文件SRAMOC.DAT读入数据。第一行为两个整数K、M满足2<=K<=10、1<=M<=1000。

输出格式:

输出Sramoc(K,M) 到 SRAMOC.OUT。 样例

SRAMOC.DA

T SRAMOC.OUT 2 7 1001 var

k,m,n,l:integer; a1,a2:longint;

a:array [1..100] of integer; test:boolean;

procedure getnum(i:integer); var

j,x:integer; s:longint; begin

if test then exit; for x:=0 to k-1 do begin

a[i]:=x; if i=l then begin

s:=0;

for j:=1 to l do

s:=s*10+a[j]; if s=0 then continue;

if s mod m=0 then begin

test:=true; n:=s; break; end; end else begin