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

文章目录

    • 一、问题描述
    • 二、C#控制台代码


一、问题描述

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

二、C#控制台代码

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();
        }

        /// 
        /// 计算蜗牛爬出井的天数
        /// 
        /// 井的高度
        /// 向上爬的高度
        /// 向下掉的高度
        /// 
        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("蜗牛已经爬出");
        }
    }
}

你可能感兴趣的:(#,C#,c#,开发语言)