标签:== clu ram 描述 get lap 啊啊啊 define 输出
(什么?!要给学弟学妹讲约瑟夫问题?!难道就不怕我给他们讲错了吗?! 啊啊啊,为了不给学弟学妹们讲错,蒟蒻表示要临阵磨一下刀、、、)
约瑟夫是一个无聊的人!!!
n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.
输入格式:
n m
输出格式:
出圈的编号
10 3
3 6 9 2 7 1 8 5 10 4
m, n \le 100m,n≤100
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define N 30005 using namespace std; int n,m; bool vis[N]; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int work() { int sum=0,j=0; while(sum<n) { for(int i=1;i<=n&&sum<n;i++) { if(vis[i]) continue; j++; if(j==m) { vis[i]=true; printf("%d ",i); sum++;j=0; } } } } int main() { n=read(),m=read(); work(); return 0; }
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define N 30005 using namespace std; int n,m,a[N]; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int work() { for(int i=1;i<n;i++) a[i]=i+1; a[n]=1;int k=1,now=n,sum=0; while(sum<n) { while(k<m) { k++; now=a[now]; } printf("%d ",a[now]); sum++;//sum表示的是出队的人的个数 a[now]=a[a[now]];k=1; } } int main() { n=read(),m=read(); work(); return 0; }
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define N 30005 using namespace std; int n,m,a[N]; bool vis[N]; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int work() { int now=1; for(int i=1;i<=n;i++) a[i]=i; while(n) { now=(now+m-1)%n; if(now==0) now=n; printf("%d ",a[now]); for(int i=now;i<n;i++) a[i]=a[i+1]; n--; } } int main() { n=read(),m=read(); work(); return 0; }
标签:== clu ram 描述 get lap 啊啊啊 define 输出
原文地址:http://www.cnblogs.com/z360/p/7670144.html