【C语言刷题系列】喝汽水问题

文章目录

一、文章简介

1.先买再换

1.1 代码逻辑:

1.2 完整代码

1.3 运行结果

1.4 根据方法一总结优化

2.边买边换

2.1 代码逻辑:

2.2 完整代码

2.3 运行结果


一、文章简介

本文所述专栏——C语言经典编程问题 C语言刷题_倔强的石头106的博客-CSDN博客

喝汽水问题是一个经典的编程问题

在这个问题中,你初始有n元钱,每瓶汽水1元。并且喝完汽水之后,每2个空瓶子可以换一瓶汽水。求可以喝到多少瓶汽水。

 解决此问题所需的C语言知识储备【C语言基础篇】结构控制(中)循环结构-CSDN博客

本篇文章介绍两种解题思路及过程

1.先买再换

先用初始的n元去买n瓶汽水,这时也拥有了n个空瓶。n个空瓶再去换n/2瓶汽水,这时现有的空瓶数量为 n/2 + n%2 (n%2表示不够换一瓶的数量,可能为1或0),再用现有的空瓶去换汽水直到空瓶数不够换一瓶汽水为止(小于2)。

1.1 代码逻辑:

放到编程中来讲:

① 首先创建变量n,读入初始金额n

②接着创建变量total用于记录可喝汽水数量,初始应该等于金额n

       创建变量empty用于记录当前空瓶子数量,初始也应该等于金额n

③然后进入while循环,循环的条件是空瓶子数量>1,

        循环内部,每一次循环完成——

                空瓶子数量empty除2,等于本次换到的汽水数量,计入喝汽水总量

                换汽水完成之后,本轮空瓶子数量= 空瓶子数量/2+空瓶子数量%2

当循环结束之后,得到的total就是可以喝的汽水总数

1.2 完整代码
//喝汽水问题
//方法一
#include<stdio.h>int main()
{int money = 0;scanf("%d", &money);//输入可用金额int total = money;//初始可喝汽水数量int empty = money;//初始空瓶子数量while (empty > 1){total = total + empty / 2;empty = empty / 2 + empty % 2;}printf("可以喝%d瓶\n", total);return 0;
}
1.3 运行结果

1.4 根据方法一总结优化

如果将程序多运行几次

观察结果,我们就会发现,初始金额n与可喝汽水数量total之间存在着一定规律

n=5,total=9

n=6,total=11

n=7,total=13

n=8,total=15

没错,total=2*n-1

如果在1元买一瓶,两空瓶换一瓶的基础条件下,可以根据上述规律将代码修改

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

2.边买边换

第二种解题思路是:

得到初始的金钱n后,优先用空瓶子去换汽水当空瓶子不够时,再花钱买一瓶重复上面的过程,直到没钱,以及空瓶子小于2

2.1 代码逻辑:

放到编程中来讲:

① 首先创建变量n,读入初始金额n

②接着创建变量total用于记录可喝汽水数量,初始等于0

       创建变量empty用于记录当前空瓶子数量,初始等于0

③然后进入while循环,循环的条件是金钱>0,或者空瓶>=2

        循环内部,每一次循环完成判断——

               先判断如果空瓶子>=2,可喝汽水数量+1,空瓶子-2

                如果空瓶子不够换,可喝汽水数量+1,金钱-1

当循环结束之后,得到的total就是可以喝的汽水总数

2.2 完整代码
//方法二
#include<stdio.h>
int main()
{int money = 0;scanf("%d", &money);int total = 0;int empty = 0;while ((money > 0)||(empty>=2)){if (empty >= 2)//有空瓶时用瓶换{total++;empty-=2;}else           //没空瓶时用钱买{total++;money--;}empty++;  //得到一瓶时空瓶+1}printf("可以喝%d瓶\n", total);return 0;
}
2.3 运行结果

使用方法二和方法一的效果相同

创作不易,还望点赞支持。如有错误,还望提醒更正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/448711.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024牛客寒假训练营1总结

G题不开long long的后果&#xff0c;即使有思路也没用。(给我气的) E题&#xff0c;不看数据范围的后果&#xff0c;不能一题名取题啊。 using ll long long; void solve() {int n, m;std::cin >> n >> m;std::vector<int>a(n);for (int i 0; i < n; i)…

MATLAB矩阵的操作(第二部分)

师从清风 矩阵的创建方法 在MATLAB中&#xff0c;矩阵的创建方法主要有三种&#xff0c;分别是&#xff1a;直接输入法、函数创建法和导入本地文件中的数据。 直接输入法 输入矩阵时要以中括号“[ ]”作为标识符号&#xff0c;矩阵的所有元素必须都在中括号内。 矩阵的同行元…

C语言递归实现数字逆序输出

引言 在计算机编程中&#xff0c;递归是一种强大的工具&#xff0c;它允许函数在其定义内部调用自身。今天&#xff0c;我们将通过一个实例——使用递归函数实现数字的逆序输出&#xff08;如将1234输出为4 3 2 1&#xff09;来深入理解递归的应用和工作原理。 代码展示与解析…

【blender插件】(1)快速开始

特性 blender的python API有如下特性: 编辑用户界面可以编辑的任意数据(场景,网格,粒子等)。修改用户首选项、键映射和主题。运行自己的配置运行工具。创建用户界面元素,如菜单、标题和面板。创建新的工具。场景交互式工具。创建与Blender集成的新渲染引擎。修改模型的数据…

Linux---动静态库

动静态库的相关概念 静态库&#xff08;.a&#xff09;&#xff1a;程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库&#xff08;.so&#xff09;&#xff1a;程序在运行的时候才去链接动态库的代码&#xff0c;多个程序共享使用库的…

1.27马尔科夫链,抽样蒙特卡洛模拟(逆转化方法,接受拒绝矩阵),马尔科夫链蒙特卡洛MCMC,隐马尔科夫(HMM(V算法剪枝优化),NLP)

马尔科夫链 蒙特卡洛法模拟 抽样&#xff0c;逆转换方法 就是说由系统自带的随机函数RANDOM&#xff0c;通过下面这个方法&#xff0c;可以变为对应的随机模拟函数 就是说要实现蒙特卡洛模拟&#xff0c;是要先有一个概率表达式&#xff0c;然后基于这个概率表达式&#xff0…

Java_简单实现无头单向非循环链表_简单实现LinkedList

文章目录 一、ArrayList的优缺点二、链表1.链表的概念及结构2.链表的分类1、单向或者双向2、带头或者不带头3、循环或者非循环 三、实现无头单向非循环链表1.定义接口2.定义MySingleList3.成员1、节点类&#xff08;定义在MySingList类里&#xff09;2、头节点引用 4.打印链表实…

Docker 容器卷

1、概念介绍 如果是CentOS7安全模块会比之前系统版本加强&#xff0c;不安全的会先禁止&#xff0c;所以目录挂载的情况被默认为不安全的行为&#xff0c;在SELinux里面挂载目录被禁止掉了&#xff0c;如果要开启&#xff0c;我们一般使用--privlegedtrue命令&#xff0c;扩大…

Framework - ActivityThread 应用启动UI渲染流程

一、概念 ActivityThread拥有 main(String[] agrs) 方法&#xff0c;作为程序的入口&#xff0c;是应用程序的初始化类。&#xff08;ActivityThread不是主线程&#xff0c;它在 main() 方法中实例化&#xff0c;是运行在主线程中。&#xff09;ApplicationThread是 ActivityT…

MySQL 中 int(1) 和 int(10) 会影响存储的长度吗

一、MySQL 中 int(1) 和 int(10) 在MySQL数据库设计中&#xff0c;经常会遇到 int 类型的字段&#xff0c;并会习惯性的指定长度&#xff0c;比如&#xff1a; int(1) 和int(10)&#xff0c;而一些新手可能会误解它们之间的关系&#xff0c;认为 int(10) 能够存储更多的数据。…

项目开发 多行编辑

问题 项目开发中&#xff0c;如何进行多行编辑 详细问题 笔者使用IDEA&#xff0c;Android Studio进行项目开发时&#xff0c;由于代码冗余&#xff0c;修改过程中若是逐一删除或编辑&#xff0c;效率相对低&#xff0c;如何进行多行删除或编辑 本文将提供IDEA&#xff0c;A…

【深度学习】基于PyTorch架构神经网络学习总结(基础概念基本网络搭建)

神经网络整体架构 类似于人体的神经元 神经网络工作原来为层次结构&#xff0c;一层一层的变换数据。如上述示例有4层&#xff0c;1层输入层、2层隐藏层、1层输出层神经元&#xff1a;数据的量或矩阵的大小&#xff0c;如上述示例中输入层中有三个神经元代表输入数据有3个特征…