喝汽水问题——C语言-创新互联
目录
成都创新互联公司是一家专业的成都网站建设公司,我们专注网站设计制作、网站建设、网络营销、企业网站建设,卖友情链接,一元广告为企业客户提供一站式建站解决方案,能带给客户新的互联网理念。从网站结构的规划UI设计到用户体验提高,创新互联力求做到尽善尽美。题目:
方法思维:
解法一:循环
解法二:递归
终极无敌解法:
总结
题目:
汽水一元钱一瓶,两个空瓶可以换一瓶汽水,如果你有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元起,快前往官网查看详情吧
网站题目:喝汽水问题——C语言-创新互联
文章转载:http://scyanting.com/article/djoppp.html