抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

递推算法

有一只大兔子,一个月生一只小兔子,过一个月小兔子变大兔子。以此求第几个月,有几个大兔子。

namespace AlgorithmTest
{
class Program
{
static void Main(string[] args)
{
//费波拉契数列,一个数等于前两个数之和。
//根据输入数,展示到这个数之前的所有数。
Console.WriteLine("请输入一个0~21之间的数");
int i = int.Parse(Console.ReadLine());
int[] array = new int[20];//定义有20个空的数组
array[0] = 1;
array[1] = 1;
if (i == 1)
{
Console.WriteLine(array[0]);
}
else if (i == 2)
{
Console.WriteLine(array[0]);
Console.WriteLine(array[1]);
}
else if (i >= 3 && i < 21)
{
Console.WriteLine(array[0]);
Console.WriteLine(array[1]);
for (int j = 3; j <= i; j++)
{
array[j - 1] = array[j - 2] + array[j - 3];
Console.WriteLine(array[j - 1]);
}
}
else
{
Console.WriteLine("数字超过范围");
}
Console.ReadKey();
}
}
}

打印结果:

image-20221025135145464

逆推

求存款

四年时间,每个月取出1000元(利率按0.0171),至少需要存多少钱才行?

image-20221025135158752

namespace AlgorithmTest02
{
class Program
{
static void Main(string[] args)
{
//逆推
float Fetch = 1000f;//每月取一千
float rate = 0.0171f;//利率
double[] corpis = new double[49];//本金
corpis[48] = Fetch;
Console.WriteLine("第48月末本利合计:" + corpis[48]);
for (int i = 47; i > 0; i--)
{
corpis[i] = (corpis[i + 1] + Fetch) / (1 + rate / 12);
Console.WriteLine("第" + i + "月末本利合计:" + corpis[i]);
}
Console.ReadKey();
}
}
}

打印结果:

image-20221025135221915

猴子摘桃

猴子第一天摘了若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃前一天的一半零一个。到第十天的时候再想多吃,见只剩下一个桃子了。求第一天一共摘了多少桃子?

static void Main(string[] args)
{
int[] taozi = new int[11];
taozi[10] = 1;
Console.WriteLine("第十天有" + taozi[10] + "个桃子");

for (int i = 9; i > 0; i--)
{
taozi[i] = 2 * (taozi[i + 1] + 1);
Console.WriteLine("第" + i + "天有" + taozi[i] + "个");
}
Console.ReadKey();
}

网上看到的写法感觉更精简

static void Main(string[] args)
{
int day, x, y;
day = 10;
y = 1;
while (day > 1)
{
x = (y + 1) * 2;
y = x;
day--;
Console.WriteLine("第" + day + "天有" + x + "个");
}
Console.ReadKey();
}

打印结果:

image-20221025135237519

评论