主题:一道难题
泡泡糖
[专家分:230] 发布于 2005-07-27 20:56:00
一道难题——做对有分加!
题目:店里有3种规格的子弹盒,分别装有13,11,7粒子弹。如果有人要买20粒子弹,那么就不必拆开盒子(13粒盒的加7粒盒的),如果要买23粒子弹,就必须拆开盒子卖。
试编程序,求:
(1)键盘输入要买的子弹数w,确定要卖w粒子弹是否要拆开,若要,则打印'yes',若不要,则打印装有13,11,7粒子弹的盒各要卖多少盒。
(2)找出一个最小的数,凡是来买子弹的数目超过这个数时,肯定不必拆开盒子!
用PASCAL算最好,也可以用数学算法解答(一样+分)!
谢谢了!
[em2]
回复列表 (共1个回复)
沙发
sd5774188 [专家分:260] 发布于 2005-07-30 20:30:00
做出了第一道:
program yb(input,output);
const kindof:array[1..3]of integer=(13,11,7);
max=1000;
var z:array[1..max]of integer;
jl:array[1..3]of integer;
n:integer;
s:integer;
procedure search(step:integer;v:integer);
procedure print;
var i:integer;
a,b,c:integer;
begin
a:=0;
b:=0;
c:=0;
for i:=1 to step-1 do
if z[i]=13 then inc(a)
else if z[i]=11 then inc(b)
else inc(c);
writeln(13,' ',a);
writeln(11,' ',b);
writeln(7,' ',c);
inc(s);
end;
var i:integer;
begin
if v=0 then begin print;exit;end;
if (v>0)and(s<1) then
begin
for i:=1 to 3 do
begin
inc(jl[i]);
z[step]:=kindof[i];
search(step+1,v-kindof[i]);
end;
end;
end;
begin
s:=0;
read(n);
search(1,n);
if s=0 then writeln('Yes');
writeln;
end.
我来回复