1、自然数拆分问题(decompose.pas)
【问题描述】
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和
【输入格式】
待拆分的自然数n
【输出格式】
若干个数的加法式子
【输入样例】 decompose.in
7
【输出样例】 decompose.out
1+1+1+1+1+1+1
1+1+1+1+1+2
1+1+1+1+3
1+1+1+2+2
1+1+1+4
1+1+2+3
1+1+5
1+2+2+2
1+2+4
1+3+3
1+6
2+2+3
2+5
3+4
var n,k:longint;
a:array[0..10000]of integer;
procedure search(remain:longint);
var i,j:longint;
begin
if remain=0 then
begin
if k=1 then exit;
for j:=1 to k-1 do write(a[j],'+');
writeln(a[k]);
exit;
end;
for i:=a[k] to remain do
begin
inc(k);
a[k]:=i;
search(remain-i);
dec(k);
end;
end;
begin
assign(input,'decompose.in'); reset(input);
assign(output,'decompose.out'); rewrite(output);
readln(n);
a[0]:=1;
search(n);
close(input); close(output);
end.
2、字符串的序号(char.pas)
问题描述
字符串 acab 含有两个 a ,一个 b ,一个 c ,和 acab 含的字母和每个字母的个数都相等的字符串还有:aacb,baca等,因为他们也是含有两个 a ,一个 b ,一个 c 。所有满足这个性质的字符串按字典顺序排列后,acab 是第 5 个,我们就说acab 的序号是 5 .再如:ba 的序号是 2,aa 的序号是 1.编程求出给定字符串 S(长度<=100) 的序号 P(保证<=30000)注意:字符串只含小写字母。
输入:(char.in)
S
输出:(char.out)
P
样例
输入:
acab
输出:
5
var s:string;
num:array['a'..'z']of integer;
long,k,j:integer;
procedure search(now:string;len:integer);
var i:char;
begin
if len=long then
begin
inc(k);
if now=s then
begin
writeln(k);
close(input); close(output);
halt;
end;
exit;
end;
for i:='a' to 'z' do
if num[i]>0 then
begin
dec(num[i]);
search(now+i,len+1);
inc(num[i]);
end;
end;
begin
assign(input,'char.in'); reset(input);
assign(output,'char.out'); rewrite(output);
readln(s);
fillchar(num,sizeof(num),0);
long:=length(s);
for j:=1 to long do inc(num[s[j]]);
search('',0);
end.
3、单词搜索(SEARCH WORDS)
提交文件名:SEARCH.PAS
问题描述:
Wade正在做一个单词搜索游戏,他必须在一个大而混乱的大写字母表中找到所有这些单词。要寻找的单词来自各种不同的飞机名、火车名,和手机名。每次下一个字符可向八个方向搜索:上、下、左、右、左上、右上、左下、右下。
输入文件(SEARCH.IN):
第一行输入N(字母表长和宽,N≤50),接下来的N行输入字母表(大写字母)。
以下每行输入一个要查询的单词,长度不超过15且为大写字母。
输出文件(SEARCH.OUT):
如果被查询的单词能被找到,输出它的起始位置和最后位置的行列坐标;
否则输出Not found。
每一个单词最多在字母表中只出现一次。
输入输出样例:
SEARCH.IN
5
EDEEE
AISKE
ESEEE
ECEEE
EEEEE
DISC
DISK
DISP
ASSK
SEARCH.OUT
1,2 4,2
1,2 2,4
Not found
2,1 2,4
var dx:array[1..8]of integer=(-1,1,0,0,-1,-1,1,1);
dy:array[1..8]of integer=(0,0,-1,1,-1,1,-1,1);
i,j,n,len:longint;
map:array[0..51,0..51]of char;
visit:array[1..50,1..50]of integer;
s:string;
b:boolean;
procedure search(x,y,k:integer);
var h,xx,yy:integer;
begin
if b then exit;
if k=len+1 then
begin
writeln(i,',',j,' ',x,',',y);
b:=true;
exit;
end;
for h:=1 to 8 do
begin
xx:=x+dx[h]; yy:=y+dy[h];
if (xx>0)and(xx<=n)and(yy>0)and(yy<=n)and(map[xx,yy]=s[k])and(visit[xx,yy]=0) then
begin
visit[xx,yy]:=1;
search(xx,yy,k+1);
visit[xx,yy]:=0;
end;
end;
end;
begin
assign(input,'search.in'); reset(input);
assign(output,'search.out'); rewrite(output);
readln(n);
for i:=1 to n do
begin
for j:=1 to n do read(map[i,j]);
readln;
end;
while not eof do
begin
b:=false;
fillchar(visit,sizeof(visit),0);
readln(s);
len:=length(s);
for i:=1 to n do
begin
for j:=1 to n do
begin
if map[i,j]=s[1] then
begin
search(i,j,2);
if b then break;
end;
end;
if b then break;
end;
if not b then writeln('Not found');
end;
cl