仔细看了这个问题,与约瑟夫问题有异曲同工之妙
下面是我的代码
int Task(PSeqList p,int n ,int r) //PSeqList p是一链表,你把读取的数据依次放入这里面
//n 是起始位置,题中的意思也就是从头开始,也就是0的意思,r和你题中的意思一样.
{
int s ,i ;
if( !p->length )
{
printf("表中无元素!n")
return 0;
}
s=n-1;
printf("输出表中最后一个任务:n")
for( i=p->length; i>=0 ; i++)
{
s=( s+ r -1) %i; //这里是每次循环跳到的位置,然后下面开始删除
Delete(p,s+1); //删去数到的这个任务
if(p->length==1)
printf("%ct",p->data[0]); //输出最后一个任务
}
return 1;
}
有什么不懂的可以问我,以上算是这个问题的核心算法吧