【C语言】喝汽水问题

大家好!今天我们来学习C语言中的喝汽水问题!

目录

[1. 题目内容:](#1. 题目内容:)

[2. 思路分析](#2. 思路分析)

[2.1 方法一](#2.1 方法一)

[2.2 方法二](#2.2 方法二)

[2.3 方法三](#2.3 方法三)

[3. 代码实现](#3. 代码实现)

[3.1 方法一](#3.1 方法一)

[3.2 方法二](#3.2 方法二)

[3.3 方法三](#3.3 方法三)


1. 题目内容

喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水?(编程实现)。

2. 思路分析

2.1 方法一

思路:

  1. 20元首先可以喝20瓶,此时手中有20个空瓶子。

  2. 两个空瓶子可以喝一瓶,喝完之后,空瓶子剩余empty/2两个空瓶子换的喝完后产生的瓶子) + empty%2不够换的瓶子 )。

  3. 如果瓶子个数超过1个,可以继续换,即重复2

2.2 方法二

按照上述喝水和用瓶子换的规则的话,可以发现,其实就是个等差数列:money*2-1

2.3 方法三

因为每两个空瓶可以换一瓶汽水,1瓶汽水1元,最开始给20元。

我们就用钱数money设置一个while循环,当钱数money不等于0时,每买一瓶汽水,就让能喝的汽水total+1,同时money-1。

因为两个空瓶可以换一瓶汽水,所以当total为偶数时,total就再+1即可。

3. 代码实现

3.1 方法一

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	int total = 0;
	int empty = 0;
	int money = 0;
	scanf("%d", &money);
	total += money;
	empty += money ;
	while (empty >= 2)
	{
		total += empty / 2;
		empty = empty/2 + empty % 2;
	}
	printf("可以喝%d瓶汽水\n", total);
	return 0;
}

3.2 方法二

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	int total = 0;
	int empty = 0;
	int money = 0;
	scanf("%d", &money);
	if (money > 0)
		total = money * 2 - 1;
	printf("可以喝%d瓶汽水\n", total);
	return 0;
}

3.3 方法三

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	int total = 0;
	int money = 0;
	scanf("%d", &money);
	while (money != 0)
	{
		total++;
		money--;
		if (total % 2 == 0)
			total++;
	}
	printf("可以喝%d瓶汽水\n", total);
	return 0;
}
相关推荐
刘梓谦3 分钟前
如何在Qt中使用周立功USB转CAN卡
开发语言·qt·zlg·周立功
CoovallyAIHub15 分钟前
基于YOLO集成模型的无人机多光谱风电部件缺陷检测
深度学习·算法·计算机视觉
CoovallyAIHub15 分钟前
几十个像素的小目标,为何难倒无人机?LCW-YOLO让无人机小目标检测不再卡顿
深度学习·算法·计算机视觉
江公望21 分钟前
Qt QML实现无边框窗口
开发语言·qt
怀旧,26 分钟前
【C++】19. 封装红⿊树实现set和map
linux·c++·算法
往事随风去36 分钟前
Redis的内存淘汰策略(Eviction Policies)有哪些?
redis·后端·算法
秦禹辰44 分钟前
宝塔面板安装MySQL数据库并通过内网穿透工具实现公网远程访问
开发语言·后端·golang
黄焖鸡能干四碗1 小时前
智慧教育,智慧校园,智慧安防学校建设解决方案(PPT+WORD)
java·大数据·开发语言·数据库·人工智能
神里流~霜灭1 小时前
(C++)数据结构初阶(顺序表的实现)
linux·c语言·数据结构·c++·算法·顺序表·单链表
一只乔哇噻1 小时前
java后端工程师进修ing(研一版 || day41)
java·开发语言·学习·算法