一道c++的有趣题目一个商人有一些重要性相同的必须要完成的任务,为了决定完成任务的顺序,他做了一下的

发布时间:2021-03-15 05:36:56

一道c++的有趣题目一个商人有一些重要性相同的必须要完成的任务,为了决定完成任务的顺序,他做了一下的操作.他把所有任务写成一个圆圈的形式,即第一个任务和最后一个相连.然后他随意挑选了一个数字r,顺时针(从任务1到2等等)从第一个任务数到第r个,把那个第r个任务移除表格,并从移除的下一个开始再数r个删除,反复如此操作直到剩下一个任务,输出这个任务.读入:必须读入从标准数据库读出数据.第一行有两个整数

网友回答

仔细看了这个问题,与约瑟夫问题有异曲同工之妙
下面是我的代码
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(%c\t,p->data[0]); //输出最后一个任务
}return 1;
}有什么不懂的可以问我,以上算是这个问题的核心算法吧
以上问题属网友观点,不代表本站立场,仅供参考!