寻找最大值可以这样做:
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
.....
实在懒得写了,反正答案就是这个了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)