【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("蜗牛已经爬出");
        }
    }
}
相关推荐
ZTLJQ24 分钟前
序列化的艺术:Python JSON处理完全解析
开发语言·python·json
2401_8914821741 分钟前
多平台UI框架C++开发
开发语言·c++·算法
88号技师1 小时前
2026年3月中科院一区SCI-贝塞尔曲线优化算法Bezier curve-based optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
t198751281 小时前
三维点云最小二乘拟合MATLAB程序
开发语言·算法·matlab
m0_726965982 小时前
面面面,面面(1)
java·开发语言
2401_831920742 小时前
分布式系统安全通信
开发语言·c++·算法
~无忧花开~2 小时前
React状态管理完全指南
开发语言·前端·javascript·react.js·前端框架
阿贵---3 小时前
C++中的RAII技术深入
开发语言·c++·算法
Traced back3 小时前
怎么用 Modbus 让两个设备互相通信**,包含硬件接线、协议原理、读写步骤,以及 C# 实操示例。
开发语言·c#