【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;
}
相关推荐
bcbobo21cn2 分钟前
C# byte类型和byte数组的使用
开发语言·c#·字节数组·byte类型
计算机安禾4 分钟前
【C语言程序设计】第37篇:链表数据结构(一):单向链表的实现
c语言·开发语言·数据结构·c++·算法·链表·蓝桥杯
啊哦呃咦唔鱼5 分钟前
LeetCode hot100-73 矩阵置零
算法
阿贵---19 分钟前
C++构建缓存加速
开发语言·c++·算法
紫丁香37 分钟前
pytest_自动化测试3
开发语言·python·功能测试·单元测试·集成测试·pytest
bearpping38 分钟前
java进阶知识点
java·开发语言
杰杰79840 分钟前
Python面向对象——类的魔法方法
开发语言·python
Joker Zxc40 分钟前
【前端基础(Javascript部分)】6、用JavaScript的递归函数和for循环,计算斐波那契数列的第 n 项值
开发语言·前端·javascript
kkkkatoq41 分钟前
JAVA中的IO操作
java·开发语言
Highcharts.js43 分钟前
React 图表如何实现下钻(Drilldown)效果
开发语言·前端·javascript·react.js·前端框架·数据可视化·highcharts