pascal语言简单的题目(我要完整的程序,谢了)

来源:百度知道 编辑:UC知道 时间:2024/05/28 08:37:00
题一:1.棋盘格数(qipan.pas )
[问题描述]:设有一个N*M 方格的棋盘( l≤ N≤100,1≤M≤100)。求出该棋盘中包含有多少个正方形、多少个长方形(不包括正方形)。
例如:当n=2,m=3时
正方形的个数有8个;即边长为1的正方形有6个;
边长为2的正方形有2个。
长方形的个数有10个;
即2*1的长方形有4个;

1*2的长方形有3个;

3*1的长方形有2个;

3*2的长方形有1个。

程序要求:输入文件qipan.in的第一行两个整数用空格隔开:N M
输出:输出文件qipan.out一行两个数,数据之间用一个空格隔开。
样例
输入:2 3
输出:8 10

题二: 数的最大值(max.pas max.in max.out)
给你一个长度为N(0<n<100)的整数,现从中减去M个数字(0<m<n),要求剩下的数最大。如:数12034560, 减去2个数字后(减去两个0),最大的数是654321。
输入:一行两个数,第一个数是长度为N的整数,第二个数是M,两数之间有一个空格。
输出:一个整数。
样例:max.in
12034560 2
max.out
654321

第一题:
var
i,j,n,m,s:longint;
begin
readln(n,m);
s:=0;
for i:=0 to n-1 do
for j:=0 to m-1 do {枚举可作为正方形左上角的格点}
if n-i<m-j then s:=s+n-i
else s:=s+m-j;
write(s,’,’);
s:=-s;
for i:=0 to n-1 do
for j:=0 to m-1 do
s:=s+(n-i)*(m-j);
writeln(s);
end.
思路: 对于棋盘中的任意一个正方形而言,只要确定了左上角的位置和边长后,该正方形就完全确定了.因此只要穷举除最下面和最右边之外的每个格点,算出以它们作为正方形的左上角位置时边长不同的正方形个数,然后累加起来就可得到全部正方形的个数.同样地也可以类似地算出长方形个数(包括正方形).
第二题:
var
str:string;
l,i,m,j:integer;
begin
readln(str);
l:=length(str); i:=l; m:=0;
while str[i]<>' ' do i:=i-1;{找到字符串里的空格}
for j:=i+1 to l do m:=m*10+ord(str[j])-ord('0');{把m从字符串里弄出来}
delete(str,i,l-i+1); l:=i-1;
for i:=1 to m do
begin
j:=0;
repeat
j:=j+1;
until (str[j]<str[j+1]) or (j>l-1);