1. 【旅游食品】(3+3+3+3=12分)
元旦到了,红旗小学要组织小学生外出旅游。炳炳妈给了炳炳s元钱,为了保证营养,她要求炳炳在n种食品(牛奶、苹果、矿泉水、蜜饯、鸡蛋、面包等)中必须每样买一份来充当中餐和点心(如果n种食品的价格分别用a[1]、a[2]、……a[n]保存,则肯定有s>a[1]+a[2]+a[3]+……+a[n]),剩余的钱由炳炳自由花费。
炳炳是一位很热心的学生,他想用剩余的钱全部用来购买这些食品中价格最便宜的那种,然后他打算把这些食品分给其他同学吃。
比如,现在妈妈给炳炳20元钱,妈妈要炳炳在矿泉水、蜜饯、牛奶、鸡蛋、苹果、面包(价格分别为1、1、3、2、1、4元)每样都必须购买一份,这样炳炳剩余的钱就是20-12=8元,炳炳就会把这剩余的8元全部用来购买矿泉水、苹果或者蜜饯(每样价格都是最低的1元),共可购买8份最便宜的食品,这样,加上炳炳原来购买的打算自己当作中餐和点心的6份食品,他就拥有了共14份食品。
下列程序中首先输入炳炳充当中餐和点心的食品数量和妈妈给炳炳的总款(用n和s表示,s必定小于100),然后会输入每种食品的价格,最后会输出炳炳手中拥有的所有食品的总的份数。对于前面的例子,输入和输出的样例如下:
【样例输入】
6 20
1 1 3 2 1 4
【样例输出】
14
请完善下列程序:
program test05;
var
n,i,j,tot,min,s:integer;
a:array[1..50] of integer;
begin
readln(n,s);
for i:=1 to n do begin read(a[i]);s:=s- a[i] ;end;
min:=32720;
for i:=1 to n do if min>a[i] then min:= a[i] ;
tot:=n;
while min<=s do
begin
tot:= tot+1 ;s:=s-min;
end;
writeln( tot );
end.
2. 【跳棋数】(3+3+3+3+3+3=18分)
跳棋是大家都熟悉的棋类活动,就是一颗棋子可以通过相邻的另一颗棋子笔直地跳到另一颗棋子相邻的空位上去。在一串很长的由数字组成的字符串中,如果某个位数为k的数值和间隔k个位置后面的位数为k的数值相等,就称为跳棋数。
比如对于字符串131313,如果规定k为1,则三个1构成了跳棋数,从第一个1开始开始跳,最多可以跳2步;从第二个位数为k的数值3开始,也构成了跳棋数,最多也可以跳2步。又如,1223122312341223,如果规定k为2,则从字符串的第一个k位数值“12”开始,组成的跳棋数的最多可以跳的步数是3(每步到达的目的地如上面下划线“__”所示),而第二个k位数值“23”开始的跳棋数最多可以跳的步数是1(每步到达的目的地如上面下划线“ ”所示)。也就是说,如果规定了k,则作为“棋子”的数值就是k位,而每次“跳棋”时必须跳过右面相邻的k个位置。
下列程序先从键盘输入k的值,然后会输入一个由数字组成的字符串(只包含0、1、…、9这些数字),而且规定,这个字符串的长度肯定是2*k的倍数。通过处理,程序最后能输出二个整数,分别表示字符串中第一个位数为k的数值开始的跳棋数最多能跳的步数和第二个位数为k的数值开始的跳棋数最多能跳的步数。请完善程序。
【知识链接】
1.t:string定义了一个字符串类型变量,s可以存储一串字符,每个字符分别存入对应的下表变量s[1]、s[2]、……中,最多可以保存255个字符。
2. t1:=copy(s,i,k)中copy( )是一个系统函数,作用是把保存在字符串变量s中的字符串从第i个位置开始复制k个,然后返回复制所得的字符串(本语句中是赋值给变量t1。
3.val(t1,a[i1],e)中val( )是一个系统过程,它能把保存在t1中的由数字组成的字符串转换成对应的数值(产生的数值可以进行四则运算),然后把数值保存到下标变量a[i1]中。比如,如果t1的值是字符串“2”,则调用val( )后a[i1]的值就是数值2。
4.length(s)是一个系统函数,作用是计算并返回保存在字符串变量s中的字符串的长度(字符个数)。
【样例输入】
3
123234123234123235123234
【样例输出】
3 1
program test06;
const maxn=200;
var
x1,x2,i,j,k,n:integer;
a:array[1..100] of integer;
b:array[1..100] of integer;
s:string;
procedure check(k:integer);
var
i,j,i1,j1,e:integer;
t1,t2:string;
begin
i:=1;i1:= 0 ;j1:=0;x1:= 0 ;x2:=0;
while i+2*k-1<=n do
begin
t1:=copy(s,i,k);i1:=i1+1;val(t1,a[i1],e);i:=i+k;
t2:=copy(s,i,k);j1:=j1+1;val(t2,b[j1],e);i:=i+k;
end;
i:=1;
while ( a[i]=a[i+1] ) and (i<i1) do
begin x1:= x1+1 ;i:=i+1;end;
j:=1;
while ( b[j]=b[j+1] ) and (j<j1) do
begin x2:= x2+1 ;j:=j+1;end;
end;
begin {main}
readln(k);
readln(s);n:=length(s);
check(k);
writeln(x1,' ',x2);
end.