C语言简单实现Josephu问题

本文介绍了如何使用C语言实现Josephus问题。当n个人围成一圈,按照顺时针方向从1开始报数,数到m的人出列,其密码成为新的m值,从下一个人继续报数,直至所有人出列。例如,当m=20,n=7,密码分别为3, 1, 7, 2, 4, 8, 4时,出列顺序为8, 3, 2, 4, 1, 7, 4。" 118086106,7800548,Python函数深入:定义、调用、多返回值与高阶函数实战,"['编程语言', 'Python', '数据挖掘', '机器学习', '函数']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言简单实现Josephu问题,vs2019编译器

上问题:

【问题描述】
编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。
【测试数据】
m的初值为20;n=7,7各人的密码依次为:3,1,7,2,4,8,4。

上代码:

#include<stdio.h>
void main() {
	int nums[] = { 3,1,7,2,4,8,4 }, m = 20, n = 7, N = n, x = 0;
	for (int i = 0; i < N; i++) {
		printf("%d ", m = (m + x) % n == 0 ? nums[x = (n--) - 1] : nums[x = (m + x) % (n--) - 1]);//利用模,模拟报数
		for (int j = x; j < n; j++)//移动已经打印的密码
			nums[j] = nums[j + 1];
	}
}

运行结果为:8 3 2 4 1 7 4

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值