好吧!想了半天,终于有头绪了,也不知道我做的对不对。先分析一下吧,由楼主的意思可知每个细胞只能存活5天,在<5天的时候,每天的细胞数量都是前一天的两倍,在第5天的时候,第一天产生的细胞就会死亡;在第6天的时候,第2天的所有细胞都会死亡;第7天时,第3天所有细胞都会死亡,依此类推。。。。。。。
下面给出我思考的时候的两种方法吧,有不对的地方还请指正!
static void Main(string[] args)
{
/*这一种是数组的方法
int[] num = new int[18]; //这里定义了一个从索引1开始的数组
num[1] = 1;
for (int i = 2; i <= 17; i++)
{
if (i < 5)
{
num = num[i - 1] * 2; //这里<5天的时候,每天的数量都是前天的两倍
}
else
{
num = num[i - 1] * 2 - num[i - 4]; //从第5天开始,都要减去前面第i-4天的细胞数量
}
}
Console.WriteLine(num[17]);*/
Console.WriteLine(Num(17));
Console.ReadKey();
}
//下面这种是递归函数的方法,由于我目前对算法接触不多,因此这种递归函数方法是我参考资料才做出来的,不知道对不对
public static int Num(int n)
{
int num;
if (n == 1)
{
num = 1;
}
else
{
if (n < 5)
{
num = Num(n - 1) * 2;
}
else
{
num = Num(n - 1) * 2 - Num(n - 4);
}
}
return num;
}
|