/×
4500个单词,分为45段(每段100个)记忆,按照{1,2,4,7,15}天后复习时间最佳 如 A 段单词 1月1号学习得 1天后1月2号复习时间最佳,2天后 1月4号复习时间最佳...等。如果有新得段没开是学习,每天必须且只能新学习一段单词。
每天新学和复习得单词数不得超过500个。当超出500时将更早学习得段停止复习(一旦停止,以后均不需要复习了)。用一段程序实现该记忆曲线。
×/
using System;
using System.Collections.Generic;
using System.Text;
namespace reminderLine
{
class Program
{
static int[] iarray = new int[45];//分为45段,数组中放置的是相对学习的总天数,包括间隔天数,如果iarray[j]==-1,说明该段不需要复习了
//static int //
static int[] step ={1,2,4,7,15};
static void Main(string[] args)
{
//
int iDays = 45;//假设学习45天。
for (int i = 0; i < iDays; i++)
{
Console.Write("第"+(i+1)+"天学习的分段号为:");
Xuexi(i);
Console.Write("/n");
}
Console.Read();
}
static void Xuexi(int i)//第i+1天学习
{
int iCurrent = 0;//记录第i+1天学习多少段
if (i < iarray.Length)//如果i小于分段数,则每天学习一段
{
iarray[i]++;
iCurrent++;
Console.Write(""+(i+1)+",");
}
for (int j = i < iarray.Length ? i-1 : iarray.Length - 1; j >= 0; j--)//依次判断其他段是否到达复习点
{
if(iarray[j]==-1)//如果iarray[j]==-1,说明该段不需要复习了
{
continue;
}
int m = 0;
for (int n = 0; n < step.Length; n++)
{
if ((i+1) - iarray[j] - j == step[n] && iarray[j] <= step[n])
{
if (iCurrent < 5)//如果当天学习的分段数不足5则复习(学习)该分段
{
iCurrent++;
Console.Write("" + (j + 1) + ",");
iarray[j]++;
}
else//如果今天学习超出5个分段,则将其他需要复习的分段值置成-1
{
iarray[j] = -1;
}
}
}
}
}
}
}