您的位置:首页 > 其它

(顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)

2013-10-31 16:31 387 查看
/*
* POJ_1591_2.cpp
*
*  Created on: 2013年10月31日
*      Author: Administrator
*/
#include <iostream>
#include <cstdio>

using namespace std;

const int maxn = 55;
int cards[25];
bool position[maxn];

int main(){
int participants,lucky;

int counter = 1;
while(scanf("%d%d",&participants,&lucky)!=EOF){
int i,j;
for(i = 0 ; i < 20 ; ++i){
scanf("%d",&cards[i]);
}

int left_num = participants;
memset(position,1,sizeof(position));

for(i = 0 ; left_num > lucky ; ++i){//在left_num>lucky的情况下,不断的扫卡片数组
int k = 0;//标记数了多少个人
for(j = 0 ; (j <participants) && left_num > lucky ; ++j ){//扫position[]数组
if(position[j]){//如果这一个人还在队列里面
if(++k == cards[i]){//如果书到了卡片中要求的数字
--left_num;//幸存者的人数-1
k=0;
position[j] = false;//那个人出队
}
}
}
}

if(counter != 1){
printf("\n");
}
printf("Selection #%d\n",counter++);
for(i = 0 ; i < participants ; ++i){
if(position[i]){
printf("%d ",i+1);
}
}
printf("\n");

}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐