问题 5143 --欣杰的约瑟夫问题

5143: 欣杰的约瑟夫问题★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 318  解决: 95
[提交][状态][命题人:]

题目描述

欣杰最近在钻研约瑟夫问题,这个是经典的问题,他已经掌握了很多解决这个问题的方法,唯独链表方法没太搞明白。

N(N<100)个人坐成一个圈,编号1-N,从第一个人开始报数,数到M(M>1)的人出列,后面的人继续从1开始,最后剩下的人的初始编号是多少?

#include<bits/stdc++.h>
using namespace std;
int N,M,head,res,k,i,t;
int arr[100][2];
int main() 
{
    cin>>N>>M;
	for(i=0;i<N-1;i++)
	{
		arr[i][0]=i+1;
		arr[i][1]=i+1;	
	}
	//将尾节点的指向头节点,构成循环单向链表 
	arr[N-1][0]=______(1)________;
	arr[N-1][1]=______(2)________;
	head=0;
	res=N;
	k=head;
	i=1;
	while(res>1)
	{
		i++;
		if(i==______(3)________)
		{
			t=arr[k][1];
			arr[k][1]=______(4)_________;
			if(t==head)  //删除head节点 
			{
				head=_______(5)_________;
			}
			i=1;
			res--;
		}
		k=arr[k][1];
	}
	cout<<______(6)________;	 
}

1)第1空的答案为________

A.   0    B.  1     C.  N-1       D.  N          

2)第2空的答案为________

A.   0    B.  1     C.  N-1       D.  N          

3)第3空的答案为________

A. N      B. N+1      C. M        D. M+1          

4)第4空的答案为________

A.    arr[arr[i][1]][1]   B.   t   C.  arr[arr[t][1]][1]      D.     arr[t][1]     

5)第5空的答案为________

A.  arr[k][1]     B. arr[t][1]     C. arr[head][1]       D. arr[i][1]          

6)第6空的答案为________

A.   arr[t][0]    B.   arr[0][0]   C.   arr[head][0]     D.  arr[i][0]       

7)如果输入的N和M分别为15和4,则输出为________

A.   5              B.  13             C.  9                      D.   14

输入

输出

只需输出每个选项的答案,均为大写字母,每行一个,一共7行,格式如下:

#include <iostream>

using namespace std;

int main()

{

    cout<<"A"<<endl;

    cout<<"A"<<endl;

    cout<<"A"<<endl;

    cout<<"A"<<endl;

    cout<<"A"<<endl;

    cout<<"A"<<endl;

    cout<<"A"<<endl;

}

提示

来源

[提交][状态]