约瑟夫环问题
约瑟夫环是一个数学的应用问题:已知n个人(以编号a,b,c...分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
输入格式:
固定为2行,第一行为m,第二行为n个人的名称列表,用英文字母代表,元素直接使用英文逗号 , 分开
输出格式:
一行,为出列元素序列,元素之间使用英文逗号 , 分开【注意:末尾元素后没有逗号】
输入样例:
在这里给出一组输入。例如:
3
a,b,c,d,e,f,g
输出样例:
在这里给出相应的输出。例如:
c,f,b,g,e,a,d
#include<iostream>
using namespace std;
string str;
void fun(int n, int m) {
int d[n], i, j = 0,k=0;
for (i = 0; i < n; i++) d[i] = 1;//1表示在环中,0表示已删除
i = 0;
while (k < n) {
if (d[i] == 1)
j++;
if (j == m) {
d[i] = 0;
// cout << (char)(a[i]+96);
cout<<str[i*2];
if(k!=n-1)
cout<<",";
k++;
j = 0;
}
if (i == n)
i = 0;
else
i++;
}
}
//a,b,c,d,e,f,g
int main()
{
int n;
cin >> n;
int k = 0;//人数记录
cin>>str;
int i=0;
for(i;str[i];)
{
i++;
}
k=(i+1)/2;
fun(k,n);
return 0;
}
//LJQ 2023 0211 0148