C#算法设计之关于1000瓶水的问题

本文实例讲述了C#算法设计之关于1000瓶水的问题。分享给大家供大家参考。具体如下:

题目如下:假设有N瓶水(当然N>0吧)
每喝一瓶后可以得到的一个空瓶子
而 每3个空瓶子又能换1瓶水,喝掉以后又得到一个空瓶子,

问总共能喝多少瓶水,最后还剩余多少个空瓶子?

代码如下:

private int Water(int n, int emptyQty)
{
 Console.WriteLine("喝了" + n + "瓶水,多" + emptyQty + "个空瓶子.");

 if (n + emptyQty < 3) //如果喝完水+空瓶还没有3的话,那就喝完了
 {
 Console.WriteLine("多" + (n + emptyQty) + "个空瓶子.");
 return n;
 }

 int a = (n + emptyQty) / 3; //喝了可换a瓶水
 int b = (n + emptyQty) % 3; //余几个空瓶

 return n + Water(a, b);
}

假设起初是1000瓶的话,调用方法

int sum = Water(1000,0);
Console.WriteLine("喝了" + sum + "瓶水");

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • 教你如何用C#制作文字转换成声音程序

    教你如何用C#制作文字转换成声音程序 在System.Speech命名空间下,SpeechSynthesizer类可以把文字读出来,一起来玩下~~ 首先在Windows窗体项目中引入System.Speech.界面部分: 后台代码也很简单,只不过调用了SpeechSynthesizer类的一些方法: using System.Windows.Forms; using System.Speech; using System.Speech.Synthesis; namespace WindowsFo

  • C#使用自定义算法对数组进行反转操作的方法

    本文实例讲述了C#使用自定义算法对数组进行反转操作的方法.分享给大家供大家参考.具体如下: C#的Array对象自带反转功能,但是下面的代码完全通过自定义的算法来实现数组反转 复制代码 代码如下: public static void ReverseArray<T>(this T[] inputArray) {   T temp = default(T);   if (inputArray == null)     throw new ArgumentNullException("i

  • C#常用GDI+文字操作汇总

    本文实例汇总了C#常用GDI+文字操作,包含了文字的投影.倒影.旋转等常见的效果,在进行C#应用程序开发中有不错的实用价值.分享给大家供大家参考之用.具体如下: 一.投影文字 private void Form1_Paint(object sender, PaintEventArgs e) { //投影文字 Graphics g = this.CreateGraphics(); //设置文本输出质量 g.TextRenderingHint = TextRenderingHint.ClearTyp

  • C#文字换行的实现方法

    本文实例讲述了C#文字换行的实现方法.分享给大家供大家参考.具体实现方法如下: 关键代码如下: 复制代码 代码如下: #region 文字换行 /// <summary> /// 文字换行 /// <para>eg:StringHelper.WrapText("YanZhiwei", 3);==>"Yan\r\nZhi\r\nwei"</para> /// </summary> /// <param nam

  • C#实现洗牌算法

    C#洗牌算法,简单演示! /// <summary> /// 洗牌算法 /// </summary> private void test() { int[] iCards = new int[54]; for (int i = 0; i < iCards.Length; i++) { iCards[i] = i + 1; } // Random rand = new Random(); int iTarget = 0, iCardTemp = 0; for (int i =

  • C#给文字换行的小技巧

    刚刚看MSDN的一个例子无意发现的小技巧,大家一看就明白了,不过好像蛮有用的,先记下咯,以后慢慢研究. using System; namespace NewLine { class Test { static void Main() { string s1 = "白日依山尽"; string s2 = "黄河入海流"; string s3 = "欲穷千里目"; string s4 = "更上一层楼"; Console.Wri

  • C#获取关键字附近文字算法实例

    本文实例讲述了C#获取关键字附近文字算法.分享给大家供大家参考.具体如下: 算法描述: 1.将文章以字符串的形式传入. 2.用正则表达式进行匹配. 3.在匹配中返回关键字附近的文件. 4.知道匹配结束. 流程图如下: public string GetLeng(string st) { string s = ""; int i = 1; string key = Request.QueryString["KeyWord"].ToString(); Regex reg

  • C#算法设计之关于1000瓶水的问题

    本文实例讲述了C#算法设计之关于1000瓶水的问题.分享给大家供大家参考.具体如下: 题目如下:假设有N瓶水(当然N>0吧) 每喝一瓶后可以得到的一个空瓶子 而 每3个空瓶子又能换1瓶水,喝掉以后又得到一个空瓶子, 问总共能喝多少瓶水,最后还剩余多少个空瓶子? 代码如下: private int Water(int n, int emptyQty) { Console.WriteLine("喝了" + n + "瓶水,多" + emptyQty + "

  • C#算法设计与分析详解

    目录 1. 什么是科学方法?? 1.观察 2.将问题规模和运行时间的关系量化 2.数学模型 近似 近似运行时间 成本模型 总结 3. 增长数量级的分类 4. 倍率实验 5.注意事项 6. 处理对于输入的依赖 7.内存 1. 对象 2. 链表 3. 数组 4. 字符串对象 作为程序员,开发完一段代码,实现了某个功能时,有必要知道: 我的程序需要多长时间? 是什么导致我的程序消耗很多内存? 比如,统计或者处理了一大批数据.影响这些问题的因素很多,例如,电脑的性能,数据的性质(值类型和引用类型的区别)

  • 基于C++的农夫过河问题算法设计与实现方法

    本文实例讲述了基于C++的农夫过河问题算法设计与实现方法.分享给大家供大家参考,具体如下: 问题描述: 一个农夫带着-只狼.一只羊和-棵白菜,身处河的南岸.他要把这些东西全部运到北岸.他面前只有一条小船,船只能容下他和-件物品,另外只有农夫才能撑船.如果农夫在场,则狼不能吃羊,羊不能吃白菜,否则狼会吃羊,羊会吃白菜,所以农夫不能留下羊和白菜自己离开,也不能留下狼和羊自己离开,而狼不吃白菜.请求出农夫将所有的东西运过河的方案. 实现上述求解的搜索过程可以采用两种不同的策略:一种广度优先搜索,另一种

  • C++算法设计之马踏棋盘的实现

    本文实例为大家分享了C++算法设计之马踏棋盘的具体代码,供大家参考,具体内容如下 (一)马踏棋盘经典算法描述: (1)马踏棋盘是经典的程序设计问题之一,主要的解决方案有两种:一种是基于深度优先搜索的方法,另一种是基于贪婪算法的方法.第一种基于深度优先搜索的方法是比较常用的算法,深度优先搜索算法也是数据结构中的经典算法之一,主要是采用递归的思想,一级一级的寻找,遍历出所有的结果,最后找到合适的解.而基于贪婪的算法则是制定贪心准则,一旦设定不能修改,他只关心局部最优解,但不一定能得到最优解. [问题

  • C语言详细分析贪心策略中最小生成树的Prime算法设计与实现

    目录 浅析最小生成树 Prime算法思想 此算法核心部分 结构体的选择 实现思路 构造实例 构造过程 代码详解 调试结果 总结 浅析最小生成树 设G=(V,E)是无向连通带权图.E中每条边(v,w)的权为c[v][w]. 生成树:如果G的子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树. 耗费:生成树上各边权的总和 最小生成树:在G的所有生成树中,耗费最小的生成树最小生成树在实际中有广泛应用. 例如,在设计通信网络时,用图的顶点表示城市,用边(v,w)的权c[v][w]表示建立城市v和城

  • Java算法设计与分析分治算法

    目录 一.前言 二.分治算法介绍 三.分治算法经典问题 3.1.二分搜索 3.2.快速排序 3.3.归并排序(逆序数) 3.4.最大子序列和 3.5.最近点对 四.结语 一.前言 在学习分治算法之前,问你一个问题,相信大家小时候都有存钱罐的经历,父母亲人如果给钱都会往自己的宝藏中存钱,我们每隔一段时间都会清点清点钱.但是一堆钱让你处理起来你可能觉得很复杂,因为数据相对于大脑有点庞大了,并且很容易算错,你可能会将它先分成几个小份算,然后再叠加起来计算总和就获得这堆钱的总数了 当然如果你觉得各个部分

  • 详解java数据结构与算法之双链表设计与实现

    在单链表分析中,我们可以知道每个结点只有一个指向后继结点的next域,倘若此时已知当前结点p,需要查找其前驱结点,那么就必须从head头指针遍历至p的前驱结点,操作的效率很低,因此如果p有一个指向前驱结点的next域,那效率就高多了,对于这种一个结点中分别包含了前驱结点域pre和后继结点域next的链表,称之为双链表.本篇我们将从以下结点来分析双链表 双链表的设计与实现 双链表的主要优点是对于任意给的结点,都可以很轻易的获取其前驱结点或者后继结点,而主要缺点是每个结点需要添加额外的next域,因

  • Go语言设计实现在任务栏里提醒你喝水的兔子

    目录 前言 详细设计 安装包 效果展示 前言 之前看到 RunCat 一只可以在电脑上奔跑猫,其主要的功能是监控电脑的CPU.内存的使用情况,使用越多跑的越快.所以准备做一只在任务栏里的兔子,主要使用 Go 语言实现一个简单的到点拜年的兔子. 详细设计 基本需求: 打开应用时可以在任务栏里显示 实现动态兔子生成 实现一只在任务栏里的兔子.基本就是一个应用的图标,并且图标是动态变化的.使用 Go 开发的话可以使用 systray 工具包,能够支持在任务栏里显示图标. go get github.c

  • Python编程实现蚁群算法详解

    简介 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法.它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为.蚁群算法是一种模拟进化算法,初步的研究表明该算法具有许多优良的性质.针对PID控制器参数优化设计问题,将蚁群算法设计的结果与遗传算法设计的结果进行了比较,数值仿真结果表明,蚁群算法具有一种新的模拟进化优化方法的有效性和应用价值. 定义 各个蚂蚁在没有事先告诉

  • C语言算法练习之抓交通肇事犯

    1. 问题描述 一辆卡车违反交通规则,撞人后逃跑.现场有三人目击该事件,但都没有记住车号,只记下车号的一些特征. 甲说:牌照的前两位数字是相同的: 乙说:牌照的后两位数字是相同的,但与前两位不同: 丙是数学家,他说:四位的车号刚好是一个整数的平方. 请根据以上线索求出车号. 2. 题目分析 按照题目的要求造出一个前两位数相同.后两位数相同且相互间又不同的 4 位整数,然后判断该整数是否是另一个整数的平方. 即求一个四位数 a 1.a 2 .a 3. a 4,满足如下的条件: 3. 算法设计 该题

随机推荐