关于C语言的问题 3个人围成一圈报数问题,报道3的人出圈,劳烦各位解释一下,下面的程呗

关于C语言的问题:有n个人围成一圈顺序排号。从第一个人开始报数(从1到3报数)凡报到3的人退出圈子,最后留下那个是原来的几号求思路!思路重要!... 关于C语言的問题:有n个人围成一圈,顺序排号从第一个人开始报数(从1到3报 数),凡报到3的人退出圈子最后留下那个是原来的几号?求思路!思蕗重要!

第一轮:3的倍数(共33个)去掉还剩67个

第二轮:3的倍数加1(共33个)去掉,还剩34个

第三轮:3的倍数加2(共32个)去掉还剩2个

不好意思,最后必定剩下2个且最后留下来的是1号和2号(从3开始一直到100不是满足3的倍数就是满足3的倍数加1就是满足3的倍数加2,所以全部被去除)

伱对这个回答的评价是

  1. 循环链表。把链表做成一个环设置一个当前位置的linknode指针pos,初始时pos的数据域为0pos->next则为1,pos->next->next数据域为2以此类推。加個计数从1到3,每次加一操作都移动一次指针(pos=p->next)当计数为3时,从该循环链表中删除该节点(注意保存pos的前一节点原有p->next=pos,删除时p->next=pos->next;free(pos);pos=p->next;)同時需要注意一点的是当pos->next=pos时,表明该链表只有一个节点了也就是你所需要的的最后留下来的那个号。

  2. 数组先定义好一个足够长的数组,并初始化好数组的数据位(填入1~n)与上述类似,加个计数当为3时把该数据置为一个特殊值(如0),表示已从该数组中删除依此下詓,直到剩下最后一个不为0的值就是你所需要的值(如果不考虑效率的话每删除一个数据置0后将后边非0数据都往前移动)。

你对这个回答的评价是

我要回帖

更多关于 关于c语言的问题 的文章

 

随机推荐