一个经典的C语言程序问题。

一个经典的C语言程序问题。,第1张

你的代码只在a[0]为最大时有效,寻找最大值,和更新a[j]的代码都需要修改。

寻找最大值可以这样做:

max=-999//在循环开始前max置充分小,以确保可以正确找到最大值

for(j=0j<4j++)

{

if(max<a[j])

{

max=a[j]

t=j

}

}//循环结束时t的值为最大数的角标

更新数组:

a[t]-=3

for(j=0j<4j++)

{

if(j==t)continue

a[j]--

}

讲个笨办法:

首先必然有一块1磅的,不然无法称出39磅的。

所以先分成两块: 1, 39

38 可以这样称 39-1

37 怎么称呢,两块不够,必须分为三块,有下面几种情况:

38-1,需要划分为:1,1,38

37, 。。。。。。1,2,37

36+1 。。。。。。1,3,36

35+2,。。。。。。1,2,35,2

显然35以下不用考虑了。

36以上我们选择最能够拉开差距的方式,优先选择36,1,3的划分方式。

为什么选差距大的?这是直觉,先不要问我理由。:)

然后,可以称出下面的数字:

35=36-1

34=36+1-3

33=36-3

32=36-1-3

到31便不能再称了,需要划分出第四块了。

31=30+128+327+1+3

还是选最大的差距的划分 1,3,9,27

31=27+1+3

30=27+3

29=27+3-1

28=27+1

27=27

26=27-1

25=27+1-3

24=27-3

23=27-1-3

22=27+1+3-9

21=27+3-9

20=27+3-9-1

19=27+1-9

18=27-9

17=27-9-1

16=27-9-3+1

.....

实在懒得写了,反正答案就是这个了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11528919.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存