【C#】蜗牛爬井问题C#控制台实现

文章目录


一、问题描述

井深30米,蜗牛在井底,每天爬3米又滑下1米,问第几天爬出来

二、C#控制台代码

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {

            // 以*横向模拟爬的过程
            ClimbDisplay(30, 3, 1);

            // 参数分别为:井高度,向上爬的高度,向下掉的高度
            ClimbDay(30, 3, 1);

            Console.ReadKey();
        }

        /// <summary>
        /// 计算蜗牛爬出井的天数
        /// </summary>
        /// <param name="height">井的高度</param>
        /// <param name="up">向上爬的高度</param>
        /// <param name="down">向下掉的高度</param>
        /// <returns></returns>
        public static void ClimbDay(int height, int up, int down)
        {
            int day = 0;
            int upCount = 0;
            int downCount = 0;

            int count = 0; // 蜗牛实际米数
            while (true)
            {
                // 向上爬
                count = count + up;
                upCount = upCount + up;

                // 下掉以后计算天数
                day++;
                // 向上爬后计算蜗牛高度是否超过井的高度
                if (count > height)
                {
                    break;
                }
                // 向下掉
                count = count - down;
                downCount = downCount + down;
                
            }

            Console.WriteLine("蜗牛第" + day.ToString() + "天就爬出了这口井");
            Console.WriteLine("蜗牛向上爬的总米数:"+ upCount);
            Console.WriteLine("蜗牛向下掉的总米数:" + downCount);
        }

        public static void ClimbDisplay(int height, int up, int down)
        {
            // 定一个List放爬行轨迹数据
            List<int> listClimbPoint = new List<int>();

            int count = 0; // 蜗牛实际米数
            while (true)
            {
                // 向上爬
                count = count + up;

                // 添加向上爬点数
                listClimbPoint.Add(up);

                // 向上爬后计算蜗牛高度是否超过井的高度
                if (count > height)
                {
                    break;
                }
                // 向下掉
                count = count - down;

                // 添加向下掉点数
                listClimbPoint.Add(-down);
            }

            string climbPrint = ""; //用来打印的字符串

            for (int i = 0; i < listClimbPoint.Count; i++)
            {
                if (listClimbPoint[i] > 0)
                {
                    for (int j = 0; j < listClimbPoint[i]; j++)
                    {
                        climbPrint = climbPrint + "*" + " ";

                        Console.WriteLine(climbPrint);

                        if (climbPrint.Length > height * 2)
                        {
                            break;
                        }

                        Thread.Sleep(300);

                        Console.Clear();
                    }
                }
                else if (listClimbPoint[i] < 0)
                {
                    for (int j = 0; j < -listClimbPoint[i]; j++) // 取相反数
                    {
                        climbPrint = climbPrint.Substring(0, climbPrint.Length - 2); ;

                        Console.WriteLine(climbPrint);

                        if (climbPrint.Length > height * 2)
                        {
                            break;
                        }

                        Thread.Sleep(300);

                        Console.Clear();
                    }
                }
            }

            Console.WriteLine("蜗牛已经爬出");
        }
    }
}
相关推荐
cuisidong19972 分钟前
springmvc 用了 @RequestMapping 是不是可以不用
java·开发语言
《源码好优多》3 分钟前
基于Java Springboot公园管理系统
java·开发语言·spring boot
我救我自己3 分钟前
UE5 slate BlankProgram独立程序系列
java·开发语言·ue5
泰山小张只吃荷园26 分钟前
SCAU软件体系结构实验四 组合模式
java·开发语言·组合模式
无休居士26 分钟前
流式上传与分片上传的原理与实现
开发语言·php·分片上传·断点续传
夫琅禾费米线2 小时前
[有趣的JavaScript] 为什么typeof null返回 object
开发语言·前端·javascript
三掌柜6662 小时前
【腾讯云产品最佳实践】腾讯云CVM入门技术与实践:通过腾讯云快速构建云上应用
开发语言·腾讯云·perl
多来米19962 小时前
小白学多线程(持续更新中)
java·开发语言
程序leo源3 小时前
C语言:操作符详解1
android·java·c语言·c++·青少年编程·c#