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;
    }


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

  • 相关阅读:
    spring boot的@RequestParam和@RequestBody的区别
    SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍
    Required String parameter is not present
    Spring Boot 日志记录 SLF4J
    400错误,Required String parameter 'paramter' is not present
    初学 Spring boot 报错 Whitelabel Error Page 404
    Powershell获取WMI设备清单
    Powershell快速入门
    perl的Sys::Syslog模块(openlog,syslog,closelog函数,setlogsock)-自定义日志
    制作Windows10政府版的小白教程
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4726080.html
Copyright © 2011-2022 走看看