几道题(pascal)

来源:百度知道 编辑:UC知道 时间:2024/06/17 19:14:40
第一题 扫雷(源程序名:1.pas)
问题描述
有一种简单的扫雷游戏:在n行2列的方格棋盘上,左列某些方格内埋有地雷,而右列每个方格中都有一个数字(0~3),第I格的数字表示左列第I-1、I、I+1格(即:上、中、下三格)中埋雷的总数。如下所示:左图是初始状态,右图是扫雷完成状态(插小旗的方格内有雷)。

你的任务是:根据右列的数字分析出左列格子中的地雷(0表示无雷,1表示有雷),并且统计出左列格子中地雷的总数。
输入文件
输入文件1.in:第一行,一个整数N(2≤N≤40),第二行有N个数字(以空格相隔),表示右列格子中的数字。
输出文件
输出文件1.out:第一行是N个0、1数字(没有空格相隔),表示左列每格中有无地雷。第二行一个整数,表示地雷总数。
样例:
输入:
7
1 2 3 2 2 2 2
输出:0111011
5

第二题 最少座位(存盘名2.pas)
问题描述:
某公共汽车线路上共有n(n<=2000)个车站(包括起点站和终点站)。在每个站上车的人中,恰好在以后各站都下去一个。为了使行驶过程中每位乘客都有座位,问车上至少要备有多少个座位?
输入文件2.in , 只有1个整数,表示车站数。
输出文件2.out ,也是一个整数,表示最少座位数。
样例
输入:7
输出:12

2题居然一分悬赏都没有,活该没人回答
要不是我要考NOIP,也不会帮你答的
程序给你
题一
{
PROG: 1
LANG: PASCAL
}
var
a,ans:array[0..41] of integer;
n,i:integer;
procedure dfs(i:integer);
var L,j:integer;
begin
if i>n then begin
for j:=1 to n do
write(ans[j]);
readln;
halt;
end;

if i=n then begin
L:=a[i]-ans[i-1];
if not(L in [0..1]) then exit;
ans[i]:=L;
dfs(n+1);
end;

L:=a[i]-ans[i-1];

if (L>2)or(L<0) then exit;

if (L=2) then begin
ans[i]:=1;
ans[i+1]:=1;
dfs(i+2);
ans[i]:=0;
ans[i+1]:=0;
end;

if (L=1) then begin
ans[i]:=1;
ans[i+1]:=0;
dfs(i+2);
ans[i]:=0;
ans[i+1]:=1;
dfs(i+2);
ans[i]:=0;
ans[i+1]:=0;
end;

if (L=0) then begin
ans[i]:=0;