【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;
}
相关推荐
头发还在的女程序员11 分钟前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
拳里剑气2 小时前
C++算法:BFS解决FloodFill算法
c++·算法·bfs·宽度优先
爱写代码的小朋友2 小时前
从零开始学 Win32 API:C++ 窗口编程实战(VS Code + MinGW-w64 命令行详解)
开发语言·c++
果汁华2 小时前
Function Calling 与 Python 实战完整指南
开发语言·网络·python
小小晓.3 小时前
C++:语句和作用域
开发语言·c++
wanderist.3 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
稚南城才子,乌衣巷风流4 小时前
支配树(Dominator Tree)详解:概念、算法与应用
算法
海天鹰4 小时前
PHP上传文件
android·开发语言·php
稚南城才子,乌衣巷风流5 小时前
动态开点:原理、实现与应用场景
数据结构·算法