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

news2024/12/24 3:30:08

文章目录

一、文章简介

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.coloradmin.cn/o/1428900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI绘画UI+Windows部署】Fooocus:Controlnet原作者结合了sd的开源和Midjourney重新设计的UI

代码&#xff1a;https://github.com/lllyasviel/Fooocus windows一键启动包下载&#xff1a;https://github.com/lllyasviel/Fooocus/releases/download/release/Fooocus_win64_2-1-831.7z B站视频教程&#xff1a;AI绘画入门神器&#xff1a;Fooocus | 简化SD流程&#xff0c…

创建型模式-单例模式:定义、实现及应用

目录 一、模式定义二、针对问题1.解决的问题2.解决方案3.举个例子4.设计模式适合场景5.实现方式6.优缺点7.与其他模式的关系 三、代码实现 一、模式定义 单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型模式&#xff0c;用于限制某个类只能创建一个对象。它提…

【代码随想录】LC 455. 分发饼干

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记&#xff0c;如有侵权&#xff0c;立即删除。 一、题目 1、原题链接 455. 分发饼干 2、题目描述 二、解题报告 1、…

367. Valid Perfect Square(有效的完全平方数)

题目描述 给你一个正整数 num 。如果 num 是一个完全平方数&#xff0c;则返回 true &#xff0c;否则返回 false 。 完全平方数 是一个可以写成某个整数的平方的整数。换句话说&#xff0c;它可以写成某个整数和自身的乘积。 不能使用任何内置的库函数&#xff0c;如 sqrt(…

随着网络的快速发展,网络安全问题也日益凸显,遇到攻击该如何处理,如何抉择合适的防护方案

DexunCloud 经过研究发现当今世界&#xff0c;随着网络的快速发展&#xff0c;网络安全问题也日益凸显。其中&#xff0c;DDoS&#xff08;分布式拒绝服务&#xff09;攻击被认为是网络安全领域里最为严重的威胁之一。毫无疑问&#xff0c;DDoS攻击不仅可以导致网络服务中断&am…

【笔记】React Native实战练习(仿网易云游戏网页移动端)

/** * 如果系统看一遍RN相关官方文档&#xff0c;可能很快就忘记了。一味看文档也很枯燥无味&#xff0c; * 于是大概看了关键文档后&#xff0c;想着直接开发一个Demo出来&#xff0c;边学边写&#xff0c;对往后工作 * 开发衔接上能够更顺。这期间肯定会遇到各种各样的问题&a…

【数据结构】链表OJ面试题(题库+解析)

前言 还不清楚链表的码喵们可以看看前篇关于链表的详解 http://t.csdnimg.cn/X6t6P 1.链表面试题 既然已经懂得了链表该如何实现&#xff0c;那么现在就趁热打铁开始练习&#xff01;这里给码喵们整理了相对不错的一些OJ题来练习 1. 删除链表中等于给定值 val 的所有结点。 力…

RK3568平台 安卓hal3适配usb camera

一.RK安卓hal3 camera框架 Camera hal3 在 android 框架中所处的位置如上图&#xff0c; 对上&#xff0c;主要实现 Framework 一整套 API 接口&#xff0c;响应其 控制命令&#xff0c;返回数据与控制参数结果。 对下&#xff0c; 主要是通 V4l2 框架实现与 kernel 的交互。3a…

AI应用开发-git开源项目的一些问题及镜像解决办法

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

Redis核心技术与实战【学习笔记】 - 18.Redis 缓存被污染了,如何选择淘汰策略

前言 在一些常见下&#xff0c;有些数据被访问的次数非常少&#xff0c;甚至只会被访问一次。当这些数据请求后&#xff0c;还继续留存在缓存中的话&#xff0c;只会白白占用缓存的空间。这种情况就是缓存污染。 当缓存污染不严重时&#xff0c;只有少量数据占据缓存空间&…

题目:有1,2,3,4共四个数字,能组成多少个不相同而且无重复数字的三位数有多少个,都是多少?lua

这是作者的思路&#xff0c; 创建三个表&#xff0c; 第一个数是从四个数遍历&#xff0c; 第二个是数剔除第一个数进行遍历 第三个是剔除第一第二个数遍历 脚本如下 local a{1,2, 3, 4} local b{} local c{} local d{} local function copy(tbl) local ctbl{} for k,v in…

Flink CEP(基本概念)

Flink CEP 在Flink的学习过程中&#xff0c;我们已经掌握了从基本原理和核心层的DataStream API到底层的处理函数&#xff0c;再到应用层的Table API和SQL的各种手段&#xff0c;可以应对实际应用开发的各种需求。然而&#xff0c;在实际应用中&#xff0c;还有一类更为复…

大数据 - Hadoop系列《三》- MapReduce(分布式计算引擎)概述

上一篇文章&#xff1a; 大数据 - Hadoop系列《三》- HDFS&#xff08;分布式文件系统&#xff09;概述-CSDN博客 目录 12.1 针对MapReduce的设计构思 1. 如何对付大数据处理场景 2. 构建抽象编程模型 3. 统一架构、隐藏底层细节 12.2 分布式计算概念 12.3 MapReduce定义…

wordpress怎么做产品展示站?推荐使用MOK主题和ent主题

大多数WordPress站点都是个人博客网站&#xff0c;主要以文章性质的图文为主。不过部分站长想要用WordPress搭建一个产品展示站&#xff0c;应该怎么做呢&#xff1f; 其实&#xff0c;WordPress可以用来建立各种各样的博客网站&#xff0c;包括个人博客、企业网站、商城、影视…

MySQL中去除重复(十一)

MySQL中去除重复(十一) 一、相同的行 我们要去除相同行要使用DISTINCT关键字 SELECT DISTINCT 列名 FROM 表名; distinct 是针对查询的结果集合进行去重而不是针对某一行或者某一列。 二、查询中的行选择 用 WHERE 子句限制从查询返回的行。一个 WHERE 子句包含一个 必须满…

Oracle 面试题 | 08.精选Oracle高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Spring-mvc、Spring-boot中如何在调用同类方法时触发AOP

1. 问题描述 Spring-mvc和Spring-boot中aop可以实现代理的功能&#xff0c;我们可以借此实现事务和日志记录或者限流等多种操作。但是&#xff0c;如果你在一个方法中调用其同类下的其他方法的时候不会触发AOP。本文主要说明其原因及解决办法和实现原理。 2. 原因 AIOP的本质是…

使用VScode编译betaflight固件--基于ubuntu平台

使用VScode编译betaflight固件--基于ubuntu平台 1、使用git克隆betaflight的开源代码2、配置编译环境3、使用VScode编译代码 window平台的见上一篇文章 使用VScode编译betaflight固件–基于windows平台 本文主要介绍在linux系统 ubuntu平台下使用VScode编译betaflight固件的方法…

十分钟上手vue!

Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以胜任。 一 vue.js的导入及使用 vue安装…

Unity 读取指定目录所占内存大小

public static class TxxTool{#region 读取文件大小private static List<string> DirList new List<string>();public static long GetFileSize(string path){DirList new List<string>();DirList.Add(path);GetAllDirecotries(path);long fileSize 0;for…