递推算法
有一只大兔子,一个月生一只小兔子,过一个月小兔子变大兔子。以此求第几个月,有几个大兔子。
namespace AlgorithmTest { class Program { static void Main(string[] args) { Console.WriteLine("请输入一个0~21之间的数"); int i = int.Parse(Console.ReadLine()); int[] array = new int[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(); } } }
|
打印结果:
逆推
求存款
四年时间,每个月取出1000元(利率按0.0171),至少需要存多少钱才行?
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(); } } }
|
打印结果:
猴子摘桃
猴子第一天摘了若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃前一天的一半零一个。到第十天的时候再想多吃,见只剩下一个桃子了。求第一天一共摘了多少桃子?
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(); }
|
打印结果: