必威体育Betway必威体育官网
当前位置:首页 > IT技术

喝汽水问题

时间:2019-08-09 03:43:14来源:IT技术作者:seo实验室小编阅读:63次「手机版」
 

汽水

题目:喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,

给20元,可以多少汽水

分析:在这里插入图片描述

20元可以先买到20瓶汽水,所以可以编写一个函数求得20个空瓶可以得到多少瓶汽水。

递归方法:可以先求得空瓶第一次能得到汽水的数量,然后求得第二次的到空瓶的数量,调用自己的函数可以的到第二次空瓶换得汽水的数量,以此计算直至判断条件空瓶的数量不足以换得汽水。

递归函数方法参考

int emptyBottle(int x)
{
	int ret = x / N;//空瓶兑换的汽水个数
	int empty = x / N + x % N;//兑换的汽水和剩下的空瓶个数之和
	if (empty > 1)
		return ret + EmptyBottle(empty);
	else
		return ret;
}

非递归方法实现:

在函数中定义临时变量用于存储可换得汽水的数量,在循环中计算每一次可剩余空瓶的数量,循环结束条件也是空瓶的数量不足以兑换一瓶汽水为止。

非递归函数方法参考

int EmptyBottle(int x)
{
	int ret = 0;
	while (x>1)	
	{
		ret += x / N;		//x没有发生改变,用ret记录能够换来汽水的数量
		x = x / N + x%N;	//x剩余空瓶的数量
	}
	return ret;
}

参考代码如下:

#include <stdio.h>
#define P 1 //汽水的单价
#define N 2 //换一瓶汽水所需的空瓶个数

//EmptyBottle函数返回用空瓶换来的汽水个数

//非递归
int EmptyBottle(int x)
{
	int ret = 0;
	while (x>1)	
	{
		ret += x / N;		//x没有发生改变,用ret记录能够换来汽水的数量
		x = x / N + x%N;	//x剩余空瓶的数量
	}
	return ret;
}

//递归

//int EmptyBottle(int x)
//{
//	int ret = x / N;//空瓶兑换的汽水个数
//	int empty = x / N + x % N;//兑换的汽水和剩下的空瓶个数之和
//	if (empty > 1)
//		return ret + EmptyBottle(empty);
//	else
//		return ret;
//}

int main()
{
	int p = 0;
	int n = 0;
	printf("请输入金额:");
	scanf("%d", &p);
	n = p / P;
	int bottle = n + EmptyBottle(n);//最终喝到的汽水个数
	printf("可换得%d瓶\n", bottle);
	return 0;
}

运行结果展示

在这里插入图片描述

相关阅读

Oracle 标识符无效问题

1、字段名书写错误2、就是用到了oracle的关键字select * from v$reserved_words   //查看oracle关键字    (size user 等)

737到底是什么问题难到了波音公司?

737主机体在最开始设计时候发动机很小,后来换大号发动机时候发现原来设计的位置装不下 为了避免起落架太矮(轱辘太短)导致发动机太

windows 10下 itunes 备份默认存储路径问题

最近在研究iphone手机备份的问题,在使用itunes给手机备份的时候,发现C盘空间不够用了,于是想把itunes的默认存储路径修改一下,在网上

天猫秒杀问题答案是怎么样的?秒杀问题是否简单?

天猫和淘宝拼多多一样,不时的推出很多优惠活动,秒杀活动也是其中一种,天猫秒杀专区很多人都不知道在哪里,秒杀需要回答问题就更不清楚

OnClientClick 不执行的两种常见问题

OnClientClick 不执行有两种问题1. JS有错误.不仅仅是OnClientClick所对应的方法有错会导致OnClientClick不执行,当前页面所有JS

分享到:

栏目导航

推荐阅读

热门阅读