早教吧作业答案频道 -->其他-->
编程题倒水1.倒水题目描述一天,天天买了N个容量可以认为是无限大的瓶子,初始时每个瓶子里有1升水.天天发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选择两个当前
题目详情
编程题 倒水
1.倒水
【题目描述】
一天,天天买了 N 个容量可以认为是无限大的瓶子,初始时每个瓶子里有
1升水.天天发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选
择两个当前含水量相同的瓶子合并,把一个瓶子的水全部倒进另一个瓶,然后把
空瓶丢弃(不能丢弃有水的瓶子).
显然在某些情况下天天无法达到目标,比如N=3,K=1.此时天天会重新买
一些新的瓶子(新瓶子的容量无限,开始时有1升水),以达到目标.
现在天天想知道,最少需要买多少新瓶子才能达到目标?
【输入文件】
一行两个正整数N,K(1
1.倒水
【题目描述】
一天,天天买了 N 个容量可以认为是无限大的瓶子,初始时每个瓶子里有
1升水.天天发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选
择两个当前含水量相同的瓶子合并,把一个瓶子的水全部倒进另一个瓶,然后把
空瓶丢弃(不能丢弃有水的瓶子).
显然在某些情况下天天无法达到目标,比如N=3,K=1.此时天天会重新买
一些新的瓶子(新瓶子的容量无限,开始时有1升水),以达到目标.
现在天天想知道,最少需要买多少新瓶子才能达到目标?
【输入文件】
一行两个正整数N,K(1
▼优质解答
答案和解析
用位操作最为方便.首先问题核心思想是,每2^n个瓶子可以最终合并保留1个瓶子(一颗满二叉树),本题就变为N能写成最少多少项2的n次方的和的形式,有多少项就会最终剩多少瓶,要添加的瓶子数量就是要减少之前多项式的项数.比如198 = 128+64+4+2,尽可能合并后最终会剩4瓶.若最后需要保留3瓶,则只需加2,变成128+64+8.
用位操作,198二进制为1100 0110,里面有4个1.要保留3瓶,就是要找出一个含有3个1的二进制数,这个数应该是最小的大于198的数,即1100 1000.我们可以看出问题可以简化为从高往低第k位需要多少来进位:0110需要多少才能变成1000
代码:
public int compute2s(int num,int k){
int moved = 0;
int ones = 0;
while(ones < k){
if((num&0x40000000)!=0){
ones++;
if(ones == k)
break;
num -= 0x40000000;
}
num moved;
int upBond = 1;
while(upBond
用位操作,198二进制为1100 0110,里面有4个1.要保留3瓶,就是要找出一个含有3个1的二进制数,这个数应该是最小的大于198的数,即1100 1000.我们可以看出问题可以简化为从高往低第k位需要多少来进位:0110需要多少才能变成1000
代码:
public int compute2s(int num,int k){
int moved = 0;
int ones = 0;
while(ones < k){
if((num&0x40000000)!=0){
ones++;
if(ones == k)
break;
num -= 0x40000000;
}
num moved;
int upBond = 1;
while(upBond
看了 编程题倒水1.倒水题目描述一...的网友还看了以下:
饮料厂为了回收旧瓶,规定4只空瓶可换一瓶汽水(包括瓶子).小明的妈妈先买了一瓶,第二天又让明明买了 2020-05-13 …
大油瓶一瓶装四千克小油瓶两瓶装两千克现有一百千克油装了共六十个瓶子,问大油瓶小油瓶各装多少个. 2020-05-14 …
大油瓶一瓶装4千克,一小瓶两瓶装一千克油,现在100千克油装了60瓶,问大小瓶各多少瓶?怎么列式 2020-05-14 …
大油瓶一瓶装4千克,一小瓶两瓶装一千克油,现在100千克油装了60瓶,问大小瓶各多少瓶?画图 2020-05-14 …
二折七折八五折九六折用分数表示一瓶矿泉水打八折后,比原价便宜0.4元.原来一瓶矿泉水的售价是多少元 2020-05-24 …
有10瓶水,其中9瓶质量相等,有一瓶比其他的几瓶水略重一些.至少称几次,能保证找出这瓶水?有10瓶 2020-06-06 …
商店货架上放着大,中,小,瓶,三种洗发液,只知道小瓶里装200克,每层洗发液的总量相等,算一算,大 2020-06-07 …
洗气瓶一边接一个长导管(就是伸到瓶底的)一边接一个短导管(就伸到瓶口的).洗气瓶一边接一个长导管( 2020-06-17 …
大油瓶一瓶装4千克,小油瓶2瓶装1千克.现有100千克油共装了32个瓶子,问大、小油瓶各有多少个用 2020-06-30 …
有AB两个玻璃瓶,A瓶里装着340毫升水,B瓶里装着290毫升水,若将A瓶里的水倒一些给B瓶,并使 2020-07-19 …