简单约瑟夫环问题解法汇总(模拟/数论)
生活随笔
收集整理的這篇文章主要介紹了
简单约瑟夫环问题解法汇总(模拟/数论)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.求解最后一個(gè)
N個(gè)人坐成一個(gè)圓環(huán)(編號(hào)為1 - N),從第1個(gè)人開(kāi)始報(bào)數(shù),數(shù)到K的人出列,后面的人重新從1開(kāi)始報(bào)數(shù)。問(wèn)最后剩下的人的編號(hào)。
例如:N = 3,K = 2。2號(hào)先出列,然后是1號(hào),最后剩下的是3號(hào)。
輸入
2個(gè)數(shù)N和K,表示N個(gè)人,數(shù)到K出列。(2 <= N, K <= 10^6)
輸出
最后剩下的人的編號(hào)
輸入樣例
輸出樣例
3 #include <bits/stdc++.h> using namespace std; //迭代寫法 int Joseph(int n,int m) {/* if(n <= 1 || m <= 1)return -1;*/int ans = 0;for(int i = 2; i <= n; i++){ans = (ans + m) % i;}return ans+1; } int main() {int n,m;cin>>n>>m;cout<<Joseph(n,m)<<endl;return 0; } #include <bits/stdc++.h> using namespace std; //遞歸寫法 int Joseph(int n,int m) {/*if(n <= 1 || m <= 1)return -1;*/if(n == 2){if(m&1)return 2;elsereturn 1;}elsereturn (Joseph(n-1,m)-1 + m) % n + 1; } int main() {int n,m;cin>>n>>m;cout<<Joseph(n,m);return 0; }2.求解每一個(gè)
題目背景
約瑟夫是一個(gè)無(wú)聊的人!!!
題目描述
n個(gè)人(n<=100)圍成一圈,從第一個(gè)人開(kāi)始報(bào)數(shù),數(shù)到m的人出列,再由下一個(gè)人重新從1開(kāi)始報(bào)數(shù),數(shù)到m的人再出圈,……依次類推,直到所有的人都出圈,請(qǐng)輸出依次出圈人的編號(hào).
輸入格式
n m
輸出格式
出圈的編號(hào)
輸入輸出樣例
輸入 #1 復(fù)制
輸出 #1 復(fù)制
3 6 9 2 7 1 8 5 10 4說(shuō)明/提示
m,n≤100
總結(jié)
以上是生活随笔為你收集整理的简单约瑟夫环问题解法汇总(模拟/数论)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Chino with Geometry(
- 下一篇: 代码编译突然变缓慢问题解决办法(code