1到999围成一圈,从1开始每隔一个删去一个(删2,4,6,8...开始),最后剩下的数是多少?

来源:百度知道 编辑:UC知道 时间:2024/05/06 03:47:11
我用一种方法算好多遍都是975,而用规律推算感觉又是错的。大家帮算算,我只想到一种方法,感觉有些麻烦,请大家多用几种方法,写明思路!
第一轮从2,4,6,8....998 然后隔999删1 这么个意思``

但这是一道逻辑题,没有机器供检验代码,代码我也想出个大概,但是结果估计不到

剩500 975不对 隔一个删一个 其实就是总数除与2加1

我觉得是999吧!
因为删完2,4,6,8,……
就开始删1,3,5,7,……
最后就是999吧!

这是约瑟夫环问题,就是从1开始数数,然后每数到2就从这个圈里吧这个人踢出去,然后从新开始数. 比如:1,2这时候第二个人数到了2所以踢掉2,然后第三个人数1,第四个人数2,然后把第四个人踢掉,以此类推,直到剩下一个人为止,查看那个人的编号即可. 根据这种思想,我们应该建立一个链表,这个链表是圈,有999个节点,然后从中开始重复上述动作即可,伪代码如下(具体的你自己想把,太晚要睡觉,这个算法网上很多):

typedef struct Node{
int iSerial;
struct Node *next;
}*node,head;

void main()
{
node pNode,pNextnod;
head *Head;
int i = 2;
int iCount = 1;
pNode = (node)malloc(sizeof(head));
pNode->iSerial = 1;
Head = pNode;

for(;i <= 999; i++)
{
pNextnod = (head*)malloc(sizeof(head));
pNextnod->iSerial = i;
pNode->next = pNextnod;
pNode = pNode->next;
}

pNode->next = Head;
pNode = pNode->next;

while(head !=

2:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子, 2062人围成一圈从某人开始逆时针报数,从1到64循环往复直到每人报过10次,有没有报过5又报过11的多少理由 13个人围成一圈,从第一个人开始顺序报号1、2、3。凡报到3者退出圈子。找出最后留在圈子的人原来的号码 C语言 10人围一圈,开始依次1到8循环报数,每当报8,此人出圈,至圈中剩一人停止,依次写出出圈人原编号 设有n个人坐一圈并按顺时针方向从1到n编号, 编写VB程序,从1-10选6个数围成一圈,相邻两个和为素数 猫把N只老鼠站成一圈,第一只开始数,数到3就把这只吃掉,又从下一只开始数,直到剩下最后一只把它放生。 N只猴子围成一圈,从第P个开始,每隔M只报数,打印每次过程,只剩下一个时为大王。 乔丹鞋从1代开始每双的图片和全国统一价格是多少? 为什么我的每段恋情从开始到结束都只有三个月