约瑟夫环(数组表示).cpp

来自「约瑟夫环」· C++ 代码 · 共 49 行

CPP
49
字号
#include<iostream>
using namespace std;

#define maxlen 30

typedef int elemtype;

typedef struct{
	elemtype elem[maxlen];
	int length;
}sqlist;
sqlist joseph;

void initlist_sq(sqlist &l){
	l.length=0;
}

void jos(int m, int n){
	cout<<"请依次输入"<<n<<"个密码:";
	for(;joseph.length<n;joseph.length++)
		cin>>joseph.elem[joseph.length];//赋密码值
	cout<<"出列顺序为:";
	int i=-1;//i为数组下标(下一值为0)
	for(int k=0;k<n;k++){
		for(int j=0;j<m;){
			i=(i+1)%n;
			if(joseph.elem[i]!=0)
				j++;
		}
		cout<<i+1<<" ";
		m=joseph.elem[i];
		joseph.elem[i]=0;
	}
	cout<<endl;
}

void main(){
	int m,n;//m为密码,n为小孩个数
	cout<<"请输入初始密码m和人数n(n不大于30):";
	do
	{   
		cin>>m>>n;
		if(n<1||n>30) cout<<"人数不合法,请重输(n不大于30):"<<endl;
	}while(n<1||n>30);

	initlist_sq(joseph);// 初始化线性表
	jos(m,n);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?