来个狠的 //n为学生数,p为单价,买h赠k,返回总价 function MyPrice(n,p,h,k:integer):integer; var i,j:integer; begin i:=0; j:=0; while j<n do begin inc(i); inc(j); if (i mod h)=0 then j:=j+k; end; result:=i*p; end;
function CalculatePrice(Number:DWORD;Price:Currency;PreferentialNum,PresentNum:DWORD):Currency; var Groups:DWORD;extends:DWORD; begin Groups:=Number div (PreferentialNum+PresentNum); extends:=Number mod (PreferentialNum+PresentNum); Result:=Groups*(Price*PreferentialNum)+extends*Price; end;CalculatePrice(84,26.0,5,2); :)
to lijinghe1(副乡长) : 至少要买5包,也就是至少要7个人以上这条件才能达到。不买够5包人家商家是不会卖给你的(:
geyobing(大地精灵)解释的很清楚了。
to: mynameisking(isking) ( ) 信誉:100 83和84个人都是1560 -o-你的算法不成立..这个才是标准的计算机算法哈 function MyPrice(n,p,h,k:integer):integer; var i,j:integer; begin i:=0; j:=0; while j<n do begin inc(i); inc(j); if (i mod h)=0 then j:=j+k; end; result:=i*p; end;
if 余(总人数/7)=5或6或0 then 钱:=26*5*取整((总人数+2)/7); else 钱:=26*5*取整(总人数/7)+26*余(总人数/7);
//n为学生数,p为单价,买h赠k,返回总价
function MyPrice(n,p,h,k:integer):integer;
var i,j:integer;
begin
i:=0;
j:=0;
while j<n do begin
inc(i);
inc(j);
if (i mod h)=0 then j:=j+k;
end;
result:=i*p;
end;
x*(5+2)<=85,
==>x=floor(85/7)
x=12 余 1
所以买12套,12套价格为 130*12=1560,在加上另外的一盒26元,一共1586元
var Groups:DWORD;extends:DWORD;
begin
Groups:=Number div (PreferentialNum+PresentNum);
extends:=Number mod (PreferentialNum+PresentNum);
Result:=Groups*(Price*PreferentialNum)+extends*Price;
end;CalculatePrice(84,26.0,5,2); :)
(x+y)*26=26*84其中X是应该买数,Y是赠送数。
得出X后,再X*26就可以得出正确答案了,
对不对呀,虽然看似烦,但其实很直观
M1=X*26*5 如Y<5
M2=余数*26 如Y>=5
M2=5*26 M=M1+M2为所求 呵呵,不知对否。
交作业算84的不就可以吗?
buy 比如买5送2,中需要买的那个数量5
give 比如买5送2,中需要送的那个数量2
price 单价
至少要买5包,也就是至少要7个人以上这条件才能达到。不买够5包人家商家是不会卖给你的(:
function MyPrice(n,p,h,k:integer):integer;
var i,j:integer;
begin
i:=0;
j:=0;
while j<n do begin
inc(i);
inc(j);
if (i mod h)=0 then j:=j+k;
end;
result:=i*p;
end;
钱:=26*5*取整((总人数+2)/7);
else
钱:=26*5*取整(总人数/7)+26*余(总人数/7);
买x送y,有
x+y=84,
y=x/5*2,
代入算出来x=60,
Money=...
就算是83也不会错,83比84明明少了一个数怎么会也是等于1560呢? (:[(26*5)/(5+2)]*83=1541.4285714285714285714285714286
总价钱=(总人数/(5+2))*5*26+((总人数 mod (5+2)) mod (5+1))*26
考虑到因素:
1. 有余数情况。
(1) 0<=余数<=5。
(2) 5<余数<7。分应该可以给我了吧,应该来说该考虑到的我都考虑了,不知道还有没有漏洞?
如果没有了,分是不是应该给我?
:)
因为小学生的题人数肯定是常数,可以有几种情况,可以这样算:
(1)人数为84时:
84/(5+2)=12(套)
26*5*12=1560(元)(2)人数为85时:
85/(5+2)=12(套)...1
26*5*12=1560(元)
26*1=26(元)
1560+26=1586(元)(3)人数为90时:
90/(5+2)=12(套)...6
26*5*12=1560(元)
因为
5<6<7
所以
26*5=130(元)
1560+130=1690(元)呵呵,看一下我们这些IT人士!
爽呀!谢谢楼主出了这么一个有趣的问题。
"于伟刚 "太空飞人!呀!!!!!你也是编程员呀,不是宇航员吗?
于伟刚 是哪国的太空人加宇航员?
X=n div 7;
Y=n mod 7;花X*5*26可得X*7份,
若Y>=5则需要再公花5*26,有0,1,2份多余,
若Y<5则需要花Y*26,没有多余.题中n=84,X=12,Y=0,要花12*5*26=1560
若n=85则要花1560+26
若n=83则X=11,y=6要花11*5*26+5*26=1560,有一份多余
int j = 0; for (int i = 0; i < 84; i++) // 共计 84 人
{
money += 26; // 每个 26 块 if (++j == 5) // 满5个送2 个
{
j = 0;
i += 2;
}
} cout << money << endl;
}
84个人的话,就是小学生的题,换到N个人就不是了
我觉得这个题lijinghe1(副乡长)已经做对了(N个人的情况)
--------------------------------------------------------------------------------
1 n整除(5+2),商为X,余数为Y
M1=X*26*5 如Y<5
M2=余数*26 如Y>=5
M2=5*26 M=M1+M2为所求 --------------------------------------------------------
有人说小学生看不懂x,y,呵呵,那只是一种符号而已.
我说清楚一点吧:
N个人,要求:所花的钱是最少的。
给小学生看的:
N/(5+2)
如果大于5,答案是:(N/(5+2))*5*26+5*26
如果小于5,答案是:(N/(5+2))*5*26+余数*26这道题我个人觉得没有什么难度,不是小学老师想得复杂,是楼上想得复杂了,(小学生只要求会算,所以只要84个人,整除。高中生就要讨论到N人的人情况。大学生眼里,就成了最优方案,最优数值解用"运筹学"来解)要做稍微有点难度的话,可以做百钱求百鸡等类似的题目,(这道题在程序里就是这一类的题目,只是更简单)
答案如下:
令 x = 5*n (n=0,1,2,......)
y = m%5 (y=0,1,2,3,4)
所以购买的总盒数为:( x + 2*(x/5) ) + y = 84;
===> 7*x/5 + y = 84; 只要将y=0,1,2,3,4等值带入解出x。其中必须满足x为整数。
所以x = 60, y=0;
则总钱数:(x+y)*26 = 60*26 = 1560
如果人数是82.83.84 那么结果都是一样的
都为1560
所以说你这种算法明显是不对的!!!!!!