数据结构与算法经典例题

数据结构与算法经典

1、约瑟夫环

问题描述:

假设有n个人站成一圈,每个人都有不同的编号i(1<=i<=n),从编号为1的人开始顺时针方向“1,2,3,4….m”循

环报数,数到m的人出列。然后从出列者的下一个人重新开始按报数,数到m的人再出列,如此重复进行,直

到n个人都出列为止。对于任意给定的n个人原始排列顺序和m值,输出n个人的出列顺序。

解题思路:

1、现在假设参与人数为:n=8;指定出列数:m=4;

那么第一个出列的数为:4 . . .

2、数组结构示意图:

3、设出列元素的下标为t,初始值为:t=0,可以得到一个规律:

t=(t+m-1)%n=(0+4-1)%8=3;

那么数组下标为3的人出列。出列一个元素之后,数组的规模:n-1;然后出列位置后面的元素向前移动。

c语言代码实现为:

#include<stdio.h>
#define MAXSIZE 10     //定义数组规模
typedef struct{
	int a[MAXSIZE+1];
	int n;
}sqlist;				//创建结构体,然后一个成员为数组,一个成员为人数n。并且重命名为sqlist

void main(){		//main方法,为c程序段主入口
 sqlist l;
 int a;
 print
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值