求解几道pascal简单题!!!!!!!!

Problems
Problem #1: A-B(dec)
Description
出题是一件痛苦的事情!
题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A+B Problem,改用A-B了哈哈!
好吧,题目是这样的:给出一串数以及一个数字C,要求计算出所有A-B=C的数对的个数。(不同位置的数字一样的数对算不同的数对)
Input Format
第一行包括2个非负整数N和C,中间用空格隔开。
第二行有N个整数,中间用空格隔开,作为要求处理的那串数。
Output Format
输出一行,表示该串数中包含的所有满足A-B=C的数对的个数。
Sample Input
4 1
1 1 2 3
Sample Output
3
Data Limit
对于90%的数据,N <= 2000;
对于100%的数据,N <= 200000。
所有输入数据都在longint范围内。
Problem #2: 还是N皇后(queens)
Description
正如题目所说,这题是著名的N皇后问题。
Input Format
第一行有一个N。接下来有N行N列描述一个棋盘,“*”表示可放“.”表示不可放。
Output Format
输出方案总数。
Sample Input
4
**.*
****
****
****
Sample Output
1

Data Limit
对于30%的数据,N≤10;
对于100%的数据,N≤14;

Problem #4: 联络(off)
Description
神牛LXX昨天刚刚满18岁,他现在是个成熟的有为男青年。他有N个MM,分别从1到N标号。这些MM有些是互相认识的。现在,LXX为了处理和MM们复杂的关系,想把他们划分成尽量多的集合,要求任意两个属于不同集合的MM都必须互相认识。这样方便交流。现在LXX想知道最多可以分成多少个集合,每个集合的人数是多少。
Input Format
输入第一行是两个数N和M。
接下来M行,每行两个数,表示这两个MM是互相认识的。
Output Format
第一行一个数S,表示最多有多少个集合。
第二行S个数,从小到大,表示每个集合的人数。
Sample Input
3 2
1 2
2 3
Sample Output
2
1 2
Data Limit
对于40%的数据,1≤N≤1000,1≤M≤500000;
对于100%的数据,1≤N≤100000,1≤M≤2000000;

好熟悉的题目啊,不幸找到了原题,贴给你第一题的AC代码,作者:蓝天白云

var
i,j,n,c:longint;
t:qword;
a:array[0..300000]of longint;
b:array[0..300000]of int64;
procedure swap(var a,b:longint);
var
temp:longint;
begin
temp:=a;
a:=b;
b:=temp;
end;
procedure sort(l,r:longint);
var
i,j,x:longint;
begin
i:=l;j:=r;x:=a[(l+r)shr 1];
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
inc(i);dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
function find(x:longint):longint;
var
l,r,m:longint;
begin
l:=1;r:=n;
repeat
m:=(l+r)shr 1;
if a[m]=x then exit(m);
if a[m]<x then
l:=m+1
else
r:=m;
until l>=r;
if (a[l]=x)and(l<=n) then exit(l);
if (a[r]=x)and(r>=1) then exit(r);
exit(0);
end;
begin
assign(input,'dec.in');reset(input);
readln(n,c);
for i:=1 to n do read(a[i]);
close(input);
sort(1,n);
j:=0;
a[0]:=a[1]-1;
for i:=1 to n do
begin
if a[i]=a[i-1] then inc(j);
a[i-j]:=a[i];
inc(b[i-j]);
end;
n:=n-j;
t:=0;
if c=0 then
for i:=1 to n do
t:=t+b[i]*(b[i]-1)div 2
else
for i:=1 to n do
begin
t:=t+b[i]*b[find(c+a[i])];
// writeln(find(c+a[i]));
end;
// for i:=1 to n do writeln(a[i],' ',b[i]);
assign(output,'dec.out');rewrite(output);
writeln(t);
close(output);
end.

后面两题好像也写过,我去找找看我的代码还在不
不幸的把第二题也找到了
var
tot,n,i,j,n1:longint;
pre,next,b,a:array[0..20]of longint;
l,r,s:array[-20..20]of longint;
ch:char;
procedure try(deep,y,z:longint);
var
i:longint;
begin
if deep>n then
begin
inc(tot);
exit;
end;
i:=next[0];
repeat
if a[deep] and s[i]<>0 then
if y and l[deep+i]<>0 then
if z and r[deep-i]<>0 then
begin
pre[next[i]]:=pre[i];
next[pre[i]]:=next[i];
try(deep+1,y xor l[deep+i],z xor r[deep-i]);
next[pre[i]]:=i;
pre[next[i]]:=i;
end;
i:=next[i];
until i>n;
end;
begin
assign(input,'queens.in');reset(input);
readln(n);
for i:=1 to n do
begin
for j:=1 to n do
begin
read(ch);
if ch='*' then
a[i]:=a[i] xor (1 shl (j-1));
end;
readln;
end;
close(input);
for i:=0 to n+1 do
next[i]:=i+1;
for i:=0 to n+1 do
pre[i]:=i-1;
n1:=1 shl n-1;
b[n+1]:=n1;
for i:=n downto 1 do
b[i]:=b[i+1] or a[i];
for i:=1 to n do
s[i]:=1 shl (i-1);
r[1-n]:=1;
for i:=1-n+1 to n-1 do
r[i]:=r[i-1] shl 1;
l[1+1]:=1;
for i:=1+1+1 to n+n do
l[i]:=l[i-1] shl 1;
try(1,1 shl (n+n-1)-1,1 shl (n+n-1)-1);
assign(output,'queens.out');rewrite(output);
writeln(tot);
close(output);
end.
应该都是AC过了的,太久了,忘了
第三提有印象做过,应该有AC,但代码找不到了
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-01
program gfgff
var
i,j,n,c:longint;
t:qword;
a:array[0..300000]of longint;
b:array[0..300000]of int64;
procedure swap(var a,b:longint);
var
temp:longint;
begin
temp:=a;
a:=b;
b:=temp;
end;
procedure sort(l,r:longint);
var
i,j,x:longint;
begin
i:=l;j:=r;x:=a[(l+r)shr 1];
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
inc(i);dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
function find(x:longint):longint;
var
l,r,m:longint;
begin
l:=1;r:=n;
repeat
m:=(l+r)shr 1;
if a[m]=x then exit(m);
if a[m]<x then
l:=m+1
else
r:=m;
until l>=r;
if (a[l]=x)and(l<=n) then exit(l);
if (a[r]=x)and(r>=1) then exit(r);
exit(0);
end;
begin
assign(input,'dec.in');reset(input);
readln(n,c);
for i:=1 to n do read(a[i]);
close(input);
sort(1,n);
j:=0;
a[0]:=a[1]-1;
for i:=1 to n do
begin
if a[i]=a[i-1] then inc(j);
a[i-j]:=a[i];
inc(b[i-j]);
end;
n:=n-j;
t:=0;
if c=0 then
for i:=1 to n do
t:=t+b[i]*(b[i]-1)div 2
else
for i:=1 to n do
begin
t:=t+b[i]*b[find(c+a[i])];
writeln(find(c+a[i]));
end;
for i:=1 to n do writeln(a[i],' ',b[i]);
assign(output,'dec.out');rewrite(output);
writeln(t);
close(output);
end.本回答被提问者采纳
第2个回答  2010-07-27
1.
var
i,j,n,c:longint;
t:qword;
a:array[0..300000]of longint;
b:array[0..300000]of int64;
procedure swap(var a,b:longint);
var
temp:longint;
begin
temp:=a;
a:=b;
b:=temp;
end;
procedure sort(l,r:longint);
var
i,j,x:longint;
begin
i:=l;j:=r;x:=a[(l+r)shr 1];
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
inc(i);dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
function find(x:longint):longint;
var
l,r,m:longint;
begin
l:=1;r:=n;
repeat
m:=(l+r)shr 1;
if a[m]=x then exit(m);
if a[m]<x then
l:=m+1
else
r:=m;
until l>=r;
if (a[l]=x)and(l<=n) then exit(l);
if (a[r]=x)and(r>=1) then exit(r);
exit(0);
end;
begin
assign(input,'dec.in');reset(input);
readln(n,c);
for i:=1 to n do read(a[i]);
close(input);
sort(1,n);
j:=0;
a[0]:=a[1]-1;
for i:=1 to n do
begin
if a[i]=a[i-1] then inc(j);
a[i-j]:=a[i];
inc(b[i-j]);
end;
n:=n-j;
t:=0;
if c=0 then
for i:=1 to n do
t:=t+b[i]*(b[i]-1)div 2
else
for i:=1 to n do
begin
t:=t+b[i]*b[find(c+a[i])];
// writeln(find(c+a[i]));
end;
// for i:=1 to n do writeln(a[i],' ',b[i]);
assign(output,'dec.out');rewrite(output);
writeln(t);
close(output);
end.
2.var
tot,n,i,j,n1:longint;
pre,next,b,a:array[0..20]of longint;
l,r,s:array[-20..20]of longint;
ch:char;
procedure try(deep,y,z:longint);
var
i:longint;
begin
if deep>n then
begin
inc(tot);
exit;
end;
i:=next[0];
repeat
if a[deep] and s[i]<>0 then
if y and l[deep+i]<>0 then
if z and r[deep-i]<>0 then
begin
pre[next[i]]:=pre[i];
next[pre[i]]:=next[i];
try(deep+1,y xor l[deep+i],z xor r[deep-i]);
next[pre[i]]:=i;
pre[next[i]]:=i;
end;
i:=next[i];
until i>n;
end;
begin
assign(input,'queens.in');reset(input);
readln(n);
for i:=1 to n do
begin
for j:=1 to n do
begin
read(ch);
if ch='*' then
a[i]:=a[i] xor (1 shl (j-1));
end;
readln;
end;
close(input);
for i:=0 to n+1 do
next[i]:=i+1;
for i:=0 to n+1 do
pre[i]:=i-1;
n1:=1 shl n-1;
b[n+1]:=n1;
for i:=n downto 1 do
b[i]:=b[i+1] or a[i];
for i:=1 to n do
s[i]:=1 shl (i-1);
r[1-n]:=1;
for i:=1-n+1 to n-1 do
r[i]:=r[i-1] shl 1;
l[1+1]:=1;
for i:=1+1+1 to n+n do
l[i]:=l[i-1] shl 1;
try(1,1 shl (n+n-1)-1,1 shl (n+n-1)-1);
assign(output,'queens.out');rewrite(output);
writeln(tot);
close(output);
end.
第3个回答  2010-07-21
完全不会做

参考资料:自己

10道pascal的递归习题,简单一点啊
1. 有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2个人大2岁。问第2个人,说比第1个人大2岁。最后问第1个人,他说是10岁。请问第5个人多大。显然,这是一个递归问题。要求第5个人的年龄,就必须先知道第4个人的年龄...

pascal 的初级题
23. 如果一个自然数等于它的全部约数(不包括这个数本身)之和,则这个自然数称为完全数.例如6本身以外的约数为 1,2,3,而6=1+2+3所以6是一个完全数.求出自然数中前3个完全数.24. 将一真分数写成几个分子是一的分数的和的形式.25. 有趣的数学问题: 某学校组织 M 名学生前往离校 X 公里处参加军事训练...

请用Free Pascal解答以下3道题。请答案简单一点,我是一个小菜鸟。_百度...
先打一下第二题:var a,b,c,m:longint;begin a:=36 div 3;b:=(48+a) div 3;c:=(64+a+b) div 3;writeln(a:4,48+a:4,64+a:4);writeln(a+b:4,b:4,64+a+b:4);writeln(a+b+c:4,b+c:4,c:4);end.

PASCAL试卷小学组
试题1. 洗牌问题 给你2N张牌,编号为1,2,3..n,n+1,..2n。这也是最初的牌的顺序。 一次洗牌是把序列变为n+1,1,n+2,2,n+3,3,n+4,4..2n,n。可以证 明,对于任意自然数N,都可以在经过M次洗牌后第一次重新得到 初始的顺序。编程对于小于10000的自然数N,求出M的值。 输入: N ...

pascal 的初级题
第一题 陶陶摘苹果 (apple.pas\/c\/cpp)【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够...

求解8道 FREE PASCAL 问题(要完整的程序),全部答完者留下QQ,我愿意支付...
lz这些题目真的不难,如果是初学者还可理解,里面至少5题是初中编程必须掌握的基础题,但程序量太大了,给些提示吧 3:f[n]:=f[n-1]+f[n-2](f[1]:=1;f[2]:=2)4: 斐波那契数列,这个数列从第三项开始,每一项都等于前两项之和。f[n]:=f[n-1]+f[n-2](f[1]:=2;f[2]:=3...

请教4个pascal语言编程题目
这是第二个问题,简单的冒泡排序,从小到大 var n,i:integer;bin,max,min:real;begin readln(n);read(max);min:=max;for i:=2 to n do begin read(bin);if bin>max then max:=bin;if bin<min then min:=bin;end;writeln(max,' ',min);end.这是第三个问题 var a:array[0..200...

求几道pascal【栈】的简单习题
由题意可得,该车站的进出方法是‘先进后出’,就相当于一个栈。进出顺序为,按顺序直接模拟即可 进,出,进,进,进,出,出,进,进,进,出,出 1.1进 然后1出 2.2进 3进 4进 栈变为(234)3.按栈的原则 出的时候先出4 再出3 出栈顺序此时为‘143’4.5进 6进 7进 栈变为(...

pascal的题目,我刚开始自学,没书没资料`帮下忙`谢谢哈~
1、输入两个整数a,b,输出它们的和(|a|,|b|<=10^9)。 注意 1、pascal使用integer会爆掉哦!2、有负数哦!3、c\/c++的main函数必须是int类型,而且最后要return 0。这不仅对洛谷其他题目有效,而且也是noip\/noi比赛的要求!好吧,同志们,我们就从这一题开始,向着大牛的路进发。“任何一个...

几个free pascal 的简单小问题,希望帮忙解决
then ans:=ge;k:=a[i]; ge:=1;end;writeln(ans);第二题 用 spfa 算法遍历全图,不断更新每个点的剩余最大体力值 spfa算法运行完后,判断最后一个点的最大剩余体力值是否大于0,大于则可以走出迷宫,否则不能,懒得编程序...做题去了,88 觉得我讲的还行,就给个分把,谢谢 ...

相似回答