学Pascal的进~

邮票面值。问题描述:邮局发行一套票面有四种不同值的邮票,如果每封信所贴邮票张数不超过三枚,存在整数R,使得用不超过三枚的邮票,可以贴出连续的整数1、2、3,…,R来,找出... 邮票面值。
问题描述:邮局发行一套票面有四种不同值的邮票,如果每封信所贴邮票张数不超过三枚,存在整数R,使得用不超过三枚的邮票,可以贴出连续的整数1、2、3,…,R来,找出这四种面值数,使得R值最大。
展开
 我来答
坪重9268
2010-03-29
知道答主
回答量:15
采纳率:0%
帮助的人:3.4万
展开全部
问题分析:知道每封信邮票数的范围(<=3),邮票有四种类型,编程找出能使面值最大邮票。其算法是:
(1) 面值不同的四种邮票,每封信所贴邮票不超过3张;
(2) 用这四种邮票贴出连续的整数,并且使r值最大;
(3) 用穷举法,找出所有符合条件的解;
(4) 本题用集合的方法统计邮票的面值,提高判重的速度。
设四种邮票的面值分别为:a,b,c,d,根据题意设:
a<b<c<d,因此a=1,用循环语句完成搜索。
Program reborn;
Var a,b,c,d:integer;
X,x0,x1,x2,x3,x4:integer;
st1:set of 1..100;
function number(a,b,c,d:integer):integer;
var n1,n2,n3,n4,sum:integer;
begin
st1:=[];
for n1:=0 to 3 do
for n2:=0 to 3-n1 do
for n3:=0 to 3-n1-n2 do
for n4:=0 to 3-n1-n2-n3 do
begin
if n1+n2+n3+n4<=3 then
begin
sum:=n1*a+n2*b+n3*c+n4*d;
st1:=st1+[sum];
end;
end;
sum:=1;
while sum in st1 do
sum:=sum+1;
number:=sum-1;
end;
begin
a:=1;x0:=0;
for b:=a+1 to 3*a+1 do
for c:=b+1 to 3*b+1 do
for d:=c+1 to 3*c+1 do
begin
x:=number(a,b,c,d);
if x>x0 then
begin
x0:=x;x1:=a;x2:=b;x3:=c;x4:=d;
write(x1:5,x2:5,x3:5,x4:5);
writeln(‘’:10,’x0=’,x0);
end;
end;
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1003192785
2010-03-29 · 超过10用户采纳过TA的回答
知道答主
回答量:61
采纳率:0%
帮助的人:33.9万
展开全部
program yp;
var
a,b,c,d,r,max_r,ma,mb,mc,md:integer;
function max_mz(a,b,c,d:integer):integer;
var
n1,n2,n3,n4,mz:integer;
mzj:set of 0..100;
begin
mzj:=[];
for n1:=0 to 3 do
for n2:=0 to 3-n1 do
for n3:=0 to 3-n1-n2 do
for n4:=0 to 3-n1-n2-n3 do
begin
mz:=n1*a+n2*b+n3*c+n4*d;
mzj:=mzj+[mz];
end;
mz:=1;
while mz in mzj do mz:=mz+1;
max_mz:=mz-1;
end;
begin
a:=1;max_r:=0;
for b:=a+1 to 3*a+1 do
for c:=b+1 to 3*b+1 do
for d:=c+1 to 3*c+1 do
begin
r:=max_mz(a,b,c,d);
if r>max_r then
begin
max_r:=r;
ma:=a;mb:=b;mc:=c;md:=d;
end;
end;
writeln(ma:4,mb:4,mc:4,md:4,max_r:8);
end.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式