从品牌网站建设到网络营销策划,从策略到执行的一站式服务
目录
题目:
方法思维:
解法一:循环
解法二:递归
终极无敌解法:
总结
汽水一元钱一瓶,两个空瓶可以换一瓶汽水,如果你有20元,你可以喝多少瓶汽水?
方法思维:看似是钱与空瓶的故事,实际上是空瓶一个人的事情;20元在这个题目中就等于40个空瓶,所以这道题是 “拥有的空瓶的数目” 和 “2” 之间的故事,不停地除以2即可。
解法一:循环#includeint main ()
{
int money=0;//钱
scanf("%d",&money);
int cap=money*2;//目前拥有的空瓶数
int sum=0;//喝的汽水数
while(cap>=2)//只要有两个以上的空瓶,就可以一直换。
{
sum+=cap/2;
cap=cap/2+cap%2;
}
printf("%d",sum);
}
解法二:递归#includeh(int n)
{
int sum=n/2;//汽水数
int cap=n%2;//空瓶数
if(sum+cap==1)
{
return 1;
}
else
{
return sum+h(sum+cap);
}
}
int main ()
{
int money=0;//钱
scanf("%d",&money);
int n=money*2;
int ret=h(n);
printf("%d",ret);
}
终极无敌解法:假设你只有一元钱,那么你可以换到一瓶水和一个空瓶。
又因为,一个空瓶可以换0.5瓶水和0.5个空瓶。
所以,将这一元钱换来的空瓶兑换为0.5瓶水和0.5个空瓶,水被你喝下去了,而空瓶又可以继续兑换,以此类推,这个数会无限接近于一个数。
像这样:
喝下的汽水 | 空瓶数目 |
1 | 1 |
1.5 | 0.5 |
1.75 | 0.25 |
1.875 | 0.125 |
最后得出结论,一元钱可以得到2瓶水和0个瓶子。
因此,喝下的汽水数=money*2。
但是,这是个现实问题,即使多么地接近于2,也不能当成2计算。
姑且把这个数当成1.999999
money | 汽水数 |
1 | 1.99999 |
2 | 3.999998 |
3 | 5.999997 |
4 | 7.999996 |
5 | 9.999995 |
所以:
#includeint main ()
{
int money=0;
scanf("%d",&money);
printf("%d",money*2-1);
}
总结方法有不同也有好坏,合适当前的情况才是最好的,最后一个方法虽然看起来逼格好高哦,但是一般的情况下谁会把这一道题想这么复杂呢?
前两个方法虽然效率比不上最后一种,但是却更符合我们的思维。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图