zoukankan      html  css  js  c++  java
  • 没有敢死队问题--约瑟夫变形

    没有敢死队问题

    Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

    题目描写叙述

    说到“敢死队”。大家不要以为我来介绍电影了。由于数据结构里真有这么道程序设计题目,原题例如以下:

    有M个敢死队员要炸掉敌人的一个碉堡,谁都不想去。排长决定用轮回数数的办法来决定哪个战士去运行任务。假设前一个战士没完毕任务,则要再派一个战士上去。现给每一个战士编一个号,大家围坐成一圈。随便从某一个战士開始计数。当数到5时,相应的战士就去运行任务,且此战士不再參加下一轮计数。假设此战士没完毕任务。再从下一个战士開始数数。被数到第5时,此战士接着去运行任务。

    以此类推,直到任务完毕为止。

    这题本来就叫“敢死队”。

    “谁都不想去”。就这一句我认为这个问题也仅仅能叫“不敢死队问题”。今天大家就要完毕这道不敢死队问题。

    我们如果排长是1号,依照上面介绍。从一号開始数。数到5的那名战士去运行任务,那么排长是第几个去运行任务的?

    输入

    输入包含多试数据,每行一个整数M(0<=M<=10000)(敢死队人数),若M==0,输入结束。不做处理。

    输出

    输出一个整数n,代表排长是第n个去运行任务。

    演示样例输入

    9
    6
    223
    0

    演示样例输出

    2
    6
    132
    约瑟夫问题的应用
    #include <stdio.h>
    #include <iostream>
    #include <algorithm>
    #include <list>
    using namespace std;
    int main()
    {
     int n,i;
     while(cin>>n&&n)
     {
        int count=0;
     list <int> node;
     list <int>::iterator j;
     for(i=1;i<=n;i++)
    	node.push_back(i); //编号
     j=node.begin();
     while(node.size()>1)
     {
     	for(i=1;i<5;i++) //第k遍遍历
    	{
    		if(j==node.end())
    			j=node.begin();
    		j++;
    	}
    	if(j==node.end())
    		j=node.begin();
    	if(*j==1)
    		{cout<<++count<<endl;node.erase(j++);break;}
    	else
    	{
    		node.erase(j++);
    		count++;
    	}
     }
     if(node.front()==1)
    	cout<<++count<<endl;
     }
     return 0;
    }


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Codeforces Round 546 (Div. 2)
    Codeforces Round 545 (Div. 2)
    Codeforces Round 544(Div. 3)
    牛客小白月赛12
    Codeforces Round 261(Div. 2)
    Codeforces Round 260(Div. 2)
    Codeforces Round 259(Div. 2)
    Codeforces Round 258(Div. 2)
    Codeforces Round 257 (Div. 2)
    《A First Course in Probability》-chaper5-连续型随机变量-随机变量函数的分布
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4726080.html
Copyright © 2011-2022 走看看