首页 > 其他分享 >3个可乐瓶可以换一瓶可乐,现在有364瓶可乐。问一共可以喝多少瓶可乐,剩下几个空瓶?

3个可乐瓶可以换一瓶可乐,现在有364瓶可乐。问一共可以喝多少瓶可乐,剩下几个空瓶?

时间:2023-10-04 12:04:57浏览次数:21  
标签:heNumber 编程 pingNumber 空瓶 364 可乐

这是一道以数学问题为背景下的编程问题,对于小白来说可能不好下手,本题主要以思路为主,体现如何把数学思维转化为编程思维,把数学算法转化为编程算法。

3个可乐瓶可以换一瓶可乐,喝的可乐总数就等于喝的加换的,开始有364瓶可乐,我们要从最初的条件入手,摆脱数学想一步求一步的思想,一切以最初条件为着手点,去推演适合编程的普遍规律。

第一次换:

喝的总数:                            喝   +   换

                                            364 +  364/3

此时剩的空瓶有:         换过喝的   +  没凑上换的

        364/3   +   364%3

第二次换:

喝的总数:               第一次喝的    +   第一次空瓶换的

(364  + 364/3)  +  (364/3   +   364%3)/3

此时剩的空瓶有:   第一次剩下的空瓶/3    +   第一次剩下的空瓶%3

                        (364/3   +   364%3)/3  +  (364/3   +   364%3)%3

此时根据前两次的规律,我们已经不难发现规律了,现在思考控制循环的条件,每3个可乐瓶可以换1瓶可乐,当空的可乐瓶不足3瓶时,就没法再换了,所以循环的条件就是空瓶>=3。

以C#代码为例实现上述算法:

一开始有364瓶可乐,所以int pingNumber = 364;

喝的可乐数记为heNumber,由于364瓶可乐要全部喝掉,所以heNumber初值为364,

int heNumber = 364;

只要瓶子的数量>=3,就可以兑换一瓶可乐,所以进入循环的条件是pingNumber>=3

整体代码如下:

int pingNumber = 364;
int heNumber = pingNumber;
while (pingNumber > 2)
{
    heNumber += pingNumber / 3;
    pingNumber = pingNumber/3+pingNumber%3;
}
Console.WriteLine("一共能喝"+heNumber+"瓶可乐,还剩"+pingNumber%3+"个空瓶");

所以解这种题如果一开始不是明确地知道思路的话,建议把原始数据代入每一步计算都列出来(而不是想一步算一步,那样只能得到每一步具体的结果,对整体解题帮助不大),用数学归纳的思想去寻找普通规律,把数学思维转化为编程思维,这样编程之路才会越走越远。

标签:heNumber,编程,pingNumber,空瓶,364,可乐
From: https://blog.51cto.com/u_15794567/7701722

相关文章

  • CF364D Ghd 题解
    CF364DGhd题解题目大意给定一个长度为\(n\)的序列,你需要从中选出一个元素个数不少于\(\left\lceil{\frac{n}{2}}\right\rceil\)的子序列,使得这个子序列中所有元素的\(\gcd\)最大。分析数据范围吓人。\(10^6\),但是根本想不到什么\(O(n\logn)\)或\(O(n)\)的算法......
  • 100048.美丽塔 2 - 364
    美丽塔2给你一个长度为n下标从0开始的整数数组maxHeights。你的任务是在坐标轴上建n座塔。第i座塔的下标为i,高度为heights[i]。如果以下条件满足,我们称这些塔是美丽的:1<=heights[i]<=maxHeights[i]heights是一个山状数组。如果存在下标i满足以下条......
  • 【CF1364C】Ehab and Prefix MEXs(构造)
    题目大意:给出长度为\(n(1\len\le10^5)\)的数组\(a\),构造数组\(b\)使得\(a_i=MEX\{b_1,b_2,...,b_1\}\)首先考虑当\(b_1,b_2,...,b_n\)为什么数时,\(a_n=MEX\{b_1,b_2,...,b_n\}\)。然后再考虑当\(b_1,b_2,...,b_{n-1}\)为什么数时,\(a_{n-1}=MEX\{b_1,b_2,...,b_{n-1}\}\)。......
  • HDU 5364
    DistributionmoneyTimeLimit:2000/1000MS(Java/Others)  MemoryLimit:65536/65536K(Java/Others)TotalSubmission(s):310  AcceptedSubmission(s):186ProblemDescriptionAFAwanttodistributionhermoneytosomebody.Shedividehermoneyintons......
  • 【BZOJ 3364】Distance Queries 距离咨询 题解
    原题简化题意:有一棵\(n\)个点的树,\(q\)组询问,每次询问回答两点间的距离。令\(dis[i][j]\)表示\(i\)到\(j\)的距离,根节点为\(rt\),则有\(dis[i][j]=dis[rt][i]+dis[rt][j]-2×dis[rt][lca(i,j)]\),按照题意打即可。#include<bits/stdc++.h>usingnamespacestd;#d......
  • [CF364D] Ghd
    题目描述JohnDoeofferedhissisterJaneDoefindthegcdofsomesetofnumbers$a$.Gcdisapositiveinteger$g$,suchthatallnumberfromthesetareevenlydivisibleby$g$andthereisn'tsuch$g'$$(g'>g)$,thatallnum......
  • [CF1364E] X-OR
    X-OR题面翻译题目描述本题是交互题。有一个固定的长度为\(n\)的排列\(P\),其值域为\([0,n-1]\),你可以进行不超过\(4269\)次询问,之后你需要输出这个排列\(P\)。输入格式第一行有一个正整数\(n\),表示排列的长度。保证\(3\len\le2048\),\(0\leP_i\len-1\)。交互格......
  • CF1364E X-OR
    CF1364EX-OR用这题总结一下交互题中的一种套路。询问两个数的or,给了我们两个想法。按位确定每个数。找到某些关键数,之后快速求出剩下的数。对于第一种想法,发现询问次数比较少,很难有优秀的做法,那么就考虑第二种。先考虑找到怎样的关键数能够更好地帮助解题。对于此题而言......
  • 「经济读物」牛奶可乐经济学
    细数一下应该是读到的第6本经济学书籍,对于这类本来就很高深但是和民生息息相关的知识还是充满好奇和“欲望”,对于读书我不知道大家是如何计划,如何开始阅读的,对于我来说我的每年书单里总会有几本感伤小文、几本旷世之作、几本专业书籍以及充满“铜臭味”的理财经济商学等类书籍,为了......
  • IS220PDOAH1A 3364940CSP2通用电气I/O模块
    IS220PDOAH1A3364940CSP2通用电气I/O模块IS220PDOAH1A3364940CSP2通用电气I/O模块 随着相关技术的发展,以太网的发展也取得了本质的飞跃,再借助于相关技术,可以从总体上提高以太网应用于工业控制中的实用性。1、采用交换技术传统以太网采用共享式集线器,其结构和功能仅......