一道c++的有趣题目一个商人有一些重要性相同的必须要完成的任务,为了决定完成任务的顺序,他做了一下的操作.他把所有任务写
1个回答

仔细看了这个问题,与约瑟夫问题有异曲同工之妙

下面是我的代码

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;

}

有什么不懂的可以问我,以上算是这个问题的核心算法吧