主题:[讨论]邮票问题(我觉得经典)
			 口口and枕头
				 [专家分:1550]  发布于 2005-07-17 18:41:00
 口口and枕头
				 [专家分:1550]  发布于 2005-07-17 18:41:00							
			4.邮局要发行一套有4种不同票面值的邮票,如果规定每封信最多只能贴3张邮票,则存在整数R,使得用不超过3张的邮票,就可以贴出连续的整数邮资1~R.写一个程序,找出这4种邮票的面值数,使得R值最大.
    分析:显然,只有4种邮票面值互不相同,才有可能得到最大的R值. 
    设4种邮票的面值为a<b<c<d.显然a只能取1;b的可能取值在a+1到3a+1之间;c的可能取值在b+1到3b+1之间;d的可能取值在c+1到3c+1之间.
    对a,b,c,d的每一种组合,分别计算满足题目要求的R值,其中使R取最大值的那一种组合,即是所求的结果.
    可以通过一个四重循环来确定由某个组合a,b,c,d可能得到的R值.设面值为a的邮票可以贴n1张(0<=n1<=3),面值为b的邮票可以贴n2张(0<=n2<=3-n1),面值为c的邮票可以贴n3张(0<=n3<=3-n1-n2),面值为d的邮票可以贴n4张(0<=n4<=3-n1-n2-n3).对满足条件
                n1+n2+n3+n4<=3
的每一组n1,n2,n3,n4,计算积之和
                sum=n1*a+n2*b+n3*c+n4*d
并将sum加入到集合S中(s初始值为空集).最后,检测1,2,3,...,n是否在集合s中,若n在s中,而n+1不在s中,则R=n.
程序如下:
program ch64;
const m=3;  {信封上最多可贴m张邮票}
var a,b,c,d:integer;
    R,Q,x1,x2,x3,x4:integer;
function number(a,b,c,d:integer):integer;  {确定由面值为a,b,c,d的4种邮票可得到的R值}
var n1,n2,n3,n4,sum,n:integer;
    s:set of 1..100;
begin
    s:=[ ];
    for n1:=0 to m do
     for n2:=0 to m-n1 do
      for n3:=0 to m-n1-n2 do
       for n4:=0 to m-n1-n2-n3 do
        if n1+n2+n3+n4<=m  {不超过m张}
        then begin
          sum:=n1*a+n2*b+n3*c+n4*d;  {得到一种邮资}
          s:=s+[sum];             {放入s集合}
             end;
    n:=1;
      while n in s do n:n+1;
      number:=n-1;              {返回最大的R值}
end;
begin
    a:=1; R:=0;
    for b:=a+1 to m*a+1 do
     for c:=b+1 to m*b+1 do
      for d:=c+1 to m*c+1 do
      begin
       Q:=number(a,b,c,d);
       if Q>R then
       begin
         R:=Q;
         x1:=a;x2:=b;x3:=c;x4:=d;
       end;
      end;
    writeln;
    write('4种票面值为:',x1:4,x3:4,x3:4,x4:4);
end. 
     
						
					 
		
			
回复列表 (共11个回复)
		
								
				沙发
				
					 cxxx401 [专家分:140]  发布于 2005-07-17 12:20:00
cxxx401 [专家分:140]  发布于 2005-07-17 12:20:00				
				晕~书上的例题.
全国青少年信息学奥林匹克竞赛培训丛书P208
							 
						
				板凳
				
					 口口and枕头 [专家分:1550]  发布于 2005-07-17 12:26:00
口口and枕头 [专家分:1550]  发布于 2005-07-17 12:26:00				
				楼下的,今天一来看到你完是你灌你水,,,,心里特不爽~~~
先是一阵开心,后一阵失望.....一看到有人回贴了呀~~心头那叫爽呀~~~
打开一看完是些废话....心情烦躁~~~~~~~~想吵人~~~~~
							 
						
				3 楼
				
					 cxxx401 [专家分:140]  发布于 2005-07-17 17:33:00
cxxx401 [专家分:140]  发布于 2005-07-17 17:33:00				
				嘿嘿,口老大这么快就生气啦.
我有的紧一本蓝书而已.
还没请教你叫我们讨论什么啊?
							 
						
				4 楼
				
					 口口and枕头 [专家分:1550]  发布于 2005-07-17 17:49:00
口口and枕头 [专家分:1550]  发布于 2005-07-17 17:49:00				
				2楼的话我收回了......
今天特不爽,,,你说说别人就算了,,,,你还敢说我`~~~~[em10]
专家分要是可以减的话,,,,我就给你全减了~[em12]
还没写完~
只是把题和分析打上来了
只是觉得经典就打上来给大家看看
如果有更巧的方法,就说出来讨论讨论罗
							 
						
				5 楼
				
					 口口and枕头 [专家分:1550]  发布于 2005-07-17 18:44:00
口口and枕头 [专家分:1550]  发布于 2005-07-17 18:44:00				
				全部写完了~~~~
可能高手觉得菜,,,,但是为了一些急切想学习的菜菜菜菜什么的....我把例题打上来了...
不管好不好,,,,,,是我的一份心意...(我手都打累`~~了~~~~~)
希望大家努力学习~~~~~~~
							 
						
				6 楼
				
					 methuselah [专家分:6840]  发布于 2005-07-18 09:35:00
methuselah [专家分:6840]  发布于 2005-07-18 09:35:00				
				什么也不说了
看看这几行
 for n1:=0 to m do
     for n2:=0 to m-n1 do
      for n3:=0 to m-n1-n2 do
       for n4:=0 to m-n1-n2-n3 do
							 
						
				7 楼
				
					 口口and枕头 [专家分:1550]  发布于 2005-07-18 12:01:00
口口and枕头 [专家分:1550]  发布于 2005-07-18 12:01:00				
				这几行怎么了??
							 
						
				8 楼
				
					 mo19880630 [专家分:420]  发布于 2005-07-21 08:00:00
mo19880630 [专家分:420]  发布于 2005-07-21 08:00:00				
				我认为用贪心法
							 
						
				9 楼
				
					 mlj [专家分:310]  发布于 2005-07-22 15:35:00
mlj [专家分:310]  发布于 2005-07-22 15:35:00				
				用搜索!容易。
							 
						
				10 楼
				
					 zhaoren [专家分:420]  发布于 2005-09-24 12:16:00
zhaoren [专家分:420]  发布于 2005-09-24 12:16:00				
				口口and枕头,你这个题怎么好象是回复我的题啊~……一模一样……
							 
									
			
我来回复