python类约瑟夫环原创问题求解 求大神
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python类约瑟夫环原创问题求解 求大神相关的知识,希望对你有一定的参考价值。
60个人从1开始编号每人拿一个号码牌排成圈,从 1开始报数,
第一次报数到2的人出列,然后从出列者的下一个人重新报数
第二次报数到3的人出列,然后从出列者的下一个人重新报数
第三次报数到4的人出列,然后从出列者的下一个人重新报数
….以此类推,直到所有人都出列,编程实现输出出列号码序列
INDEX_FIRST = 2 # 第一次站出来的是2号
origin = list(range(1, COUNT+1))
res = []
index_label = INDEX_FIRST - 1
index_temp = 0
while origin:
index_temp = (index_label + index_temp) % len(origin)
res.append(origin.pop(index_temp))
index_label += 1
print(res)
请点击输入图片描述
参考技术A PEOPLE_MAXLEN=60people=[i for i in range(1,PEOPLE_MAXLEN+1)]
index=0
order=0
flag=2
result=[]
while people.count(-1)!=PEOPLE_MAXLEN:
if people[index]!=-1:
order+=1
if order==flag:
result.append(people[index])
people[index]=-1
flag+=1
order=0
index=(index+1)%PEOPLE_MAXLEN
print(result)
py3.7
java 蓝桥杯 约瑟夫环
约瑟夫环
问题描述
n 个人的编号是 1~n,如果他们依编号按顺时针排成一个圆圈,从编号是1的人开始顺时针报数。(报数是从1报起)当报到 k 的时候,这个人就退出游戏圈。下一个人重新从1开始报数。求最后剩下的人的编号。这就是著名的约瑟夫环问题。本题目就是已知 n,k 的情况下,求最后剩下的人的编号。
题目的输入是一行,2个空格分开的整数n, k。
约定:0 < n,k < 1百万
要求输出一个整数,表示最后剩下的人的编号。
样例输入:
10 3
样例输出:
4
思路见代码及注释
import java.util.Scanner;
public class Main
static int out=0;//标记已被淘汰的人数
public static void main(String[] args)
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
//将n个人存储在数组中
int[]arr=new int[n+1];
for (int i = 1; i < arr.length; i++) arr[i]=i;
//动态变化的索引,用于模拟循环报数
int in=1;
int ik=1;
//当淘汰人数等于n-1时会跳出循环
while (out<n-1)
//被置为0的视为已经被淘汰,所以碰到0和碰到非0的操作是不一样的
if(arr[in]==0)
//已被淘汰 不需要报数
if(in==n)in=1;else in++;
else
if(ik==k)
arr[in]=0;//置为0(淘汰)
ik=0;//报数从1开始,因为下面有K++ 所以置0
out++;
if(in==n)in=1;else in++;
ik++;
//这时候数组中肯定只剩一个人不为0了,那么这个人的序号就是最后的answer
for (int i = 1; i < arr.length; i++)
if(arr[i]!=0)
System.out.println(arr[i]);
break;
以上是关于python类约瑟夫环原创问题求解 求大神的主要内容,如果未能解决你的问题,请参考以下文章