51Nod_1073 约瑟夫环

2024-01-20 15:48
文章标签 51nod 约瑟夫 1073

本文主要是介绍51Nod_1073 约瑟夫环,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                                            51Nod_1073 约瑟夫环

                                    http://www.51nod.com/Challenge/Problem.html#!#problemId=1073

 

题目

N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。例如:N = 3,K = 2。2号先出列,然后是1号,最后剩下的是3号。

输入

2个数N和K,表示N个人,数到K出列。(2 <= N, K <= 10^6)

输出

最后剩下的人的编号

样例输入

3 2

样例输出

3

分析

公式题

C++程序

#include<iostream>using namespace std;int main()
{int n,k,ans=0;cin>>n>>k;for(int i=2;i<=n;i++)ans=(ans+k)%i;cout<<ans+1<<endl;return 0;
}

 

这篇关于51Nod_1073 约瑟夫环的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/626520

相关文章

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用

PHP约瑟夫环问题

#循环 function circle($arr,$idx,$k){for($i=0;$i<$idx;$i++){$tmp = array_shift($arr);array_push($arr,$tmp);}$j = 1;while(count($arr) > 0){$tmp = array_shift($arr);if($j++%$k == 0){echo $tmp."\n";}else{a

【51nod】算法马拉松4 F 移数字 【快速求N!%P】【FFT】

传送门:【51nod】算法马拉松4 F 移数字 涉及知识点:多项式求逆,多项式除法,多点插值,阶乘取模。 对于N!%P,复杂度为 O(N−−√log2N−−√) O(\sqrt N \log^2\sqrt N)。 但常数巨大,和暴力算实际复杂度只相差常数= = 这个是可以扩展到组合数取模的~ my  code: my~~code: #include <stdio.h>#includ

约瑟夫问题(多解)——POJ 3750

对应POJ题目:点击打开链接 小孩报数问题 Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit Status Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,

约瑟夫问题的五种实现方法

一、队列 #include <stdio.h>#include <queue>using namespace std;queue<int> q;int n, m, cnt, out, a[101]; //a[i]=0表示在圈里 int main(){scanf("%d %d", &n, &m);for(int i=1; i<=n; i++){q.push(i);}while(!q

理解 约瑟夫环

总结了个小经验,有时候光靠看是看不出什么端倪来的,还必须得动下笔,比划比划也许就那么简单 #include <stdio.h> #include <stdlib.h> typedef struct Node {  int data;  struct Node *next; }Node;   Node *CreatList(int n)    //创建一个含n个人的循环链表 { int i;

约瑟夫环和一元多项式

约瑟夫环 一、问题描述     假设有 n 个人围成一圈,从第一个人开始报数,报数到 m 的人将被淘汰出圈,然后从下一个人开始继续从 1 报数,如此重复,直到最后只剩下一个人。求最后剩下的这个人的编号。 二、问题分析 可以使用循环链表来模拟这个过程。 1.创建一个包含 n 个节点的循环链表,每个节点代表一个人,节点中存储这个人的编号。 2.从第一个节点开始报数,每报到 m,就将对应

第十八题(约瑟夫环问题)

第18 题: 题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始, 每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数 字)。 当一个数字删除后,从被删除数字的下一个继续删除第m 个数字。 求出在这个圆圈中剩下的最后一个数字。 这道题网上讲解的很多,主要有两种方法: 第一种,采用循环链表实现,建立一个有n个节点的循环链表,然后从链表头开

【C/C++】约瑟夫环问题

目录 题目描述输入描述输出描述 示例题解 题目描述 n个人(0,1,2,3,4…n-1),围成一圈,从编号为k的人开始报数,报数报到m的人出队(报数是1,2,…m这样报的)。下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时候,那个人就是大王。现在,给定n,k,m, 请你求出大王的编号。 输入描述 输入一行包含三个整数n,k,m 1<=n<=100,1<=

桟和队列--约瑟夫问题

Time Limit: 1000MS Memory limit: 65536K 题目描述 n个人想玩残酷的死亡游戏,游戏规则如下: n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。 请输出最后一个人的编号。 输入 输入n和m值。 输出 输出胜利者的编号。 示例输入 5 3