⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 有编号从1到N的N个人坐成一圈报数
💻 CPP
字号:
#include<iostream>
#include<stdio.h>
using namespace std;

#define OK  1
#define OVERFLOW 0
typedef int ElemType;

 typedef  struct CirNode {
	ElemType mima;
	int Number;
	CirNode *next;
}CirNode, *CirLinkList;

int CreateList_L(CirLinkList &L, int n) {
	CirLinkList p,q;
	L = (CirLinkList)malloc(sizeof(CirNode));
	if(!L)
		return OVERFLOW;
	q = L;
	for(int i = 1; i <= n; i++) {
		p = (CirLinkList)malloc(sizeof(CirNode));
		if(!p)
			return OVERFLOW;
		scanf("%d",&p->mima);
		p->Number = i;
		L->next = p;
		L = L->next;
	}
	L->next = q->next;
	L = L->next;
	free(q);
	return OK;
}
int GetNumElem_L(CirLinkList &L, int n, ElemType &e) {
	CirLinkList q;
	int i(1);
	while(i) {
		if(n == 1) {
			q = L;
			cout << L->Number << " ";
			e = L->mima;
			L = L->next;
			free(q);
			break;
		}
		if(i == n - 1) {
			q = L->next;
			L->next = q->next;
			L = L->next;
			e = q->mima;
			cout << q->Number << " ";
			free(q);
			break;
		}
		i++;
		L = L->next;
	} 
	return OK;
}

int main()
{
	int PeopleNum;
	int m;
	ElemType e;
	CirLinkList L;

	cout << "输入人数为0时结束程序" << endl;
	cout << "输入首个密码m:";
	cin >> m;
	cout << "输入人数:";
	cin >> PeopleNum;
	cout << "输入每个人的密码:";
	CreateList_L(L, PeopleNum);

	while(PeopleNum) {
		m = m % PeopleNum;
		while(PeopleNum != 1) {
			if(GetNumElem_L(L, m, e)) {
				PeopleNum--;
				m = e % PeopleNum;
				if(PeopleNum == 1) {
					cout << L->Number << endl;
					free(L);
				}
			}
		}
	}

	return 0;
}

⌨️ 快捷键说明

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