蛋糕编程学习(c++买蛋糕编程)

2023-11-10 10:05:17 数码极客 bianji01

 

切蛋糕c++编程求解答

a,b,c从小到大重新排列,

以下讨论假定a<=b<=c,也就是已经排列完成。

两个零的情况:

如果a=0,b=0,那么c肯定大于0,输出切0刀。

一个零的情况:

如果a=0,0

如果a=0,0

没有零的情况:

如果0

如果a+b==c输出切两刀

其他输出切三刀。

pascal 生日蛋糕问题

programcgb;

n,m,r,h,i:longint;

opt:longint;

minv:array[0..20]oflongint;

functionmin(a,b:longint):longint;

begin

ifa

functionmax(a,b:longint):longint;

begin

ifa>bthenmax:=aelsemax:=b;

functionmaxv(r,h,k:longint):longint;

vari:longint;

begin

maxv:=0;

fori:=1tokdo

begin

dec(r);dec(h);

if(r<1)or(h<1)thenexit;

inc(maxv,r*r*h);

proceduredfs(k,lr,lh,s,n:longint);

varr,h,e,v,s1:longint;

begin

ifk=0then

begin

ifn=0thenopt:=s;

exit;

forr:=lr-1downtokdo

begin

e:=min(ndiv(r*r),lh-1);

forh:=edowntokdo

begin

v:=n-r*r*h;

s1:=s+2*r*h;

if(v>0)or((k=1)and(v=0))then

if(maxv(r,h,k-1)>=v)and(minv[k-1]<=v)and(s1

dfs(k-1,r,h,s1,v);

begin

repeat

opt:=maxlongint;

readln(n,m);

r:=0;h:=0;minv[0]:=0;

fori:=1tomdo

begin

inc(r);inc(h);

minv[i]:=minv[i-1]+r*r*h;

forr:=trunc(sqrt(ndivm))downtomdo

forh:=ndiv(r*r)downtomdo

if2*r*h+r*r

dfs(m-1,r,h,2*r*h+r*r,n-r*r*h);

writeln(opt);

untilseekeof;

本回答由提问者推荐

声明:易趣百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系315127732@qq.com
广告位招租
横幅广告