文章目录
一、问题描述
井深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("蜗牛已经爬出");
}
}
}