约瑟夫环(数组解决)大一新生

#include<stdio.h>
int main()
{
int s = 0, j = 0, n, m;
printf(" 约瑟夫环问题 \n");
printf(“请 输 入 数 字 的 总 个 数m:”);
scanf("%d", &m);
printf(“每次删除第n个数字,请输入 n:”);
scanf("%d", &n);
int a[m], b[m],i, count = 0;
for(i=0;i<m;i++)
a[i] = 1 ;
//以下都是根据数学分析得出,首先数组全部赋值为1
for(i=0;j!=m;i++)
{
if(i==m) //当i=m时,数组从头开始查找符合要求的数字
i = 0;
if(a[i]!=0&&i!=m)//条件:该数字为1时,s加1
s++; //当s=n时,利用下面的条件输出数字的下标
if(a[i]1&&sn)//满足两个条件,数字为1意味着该数字未被删除
{ //s=n意味着这个数字是应该被删除的数字
a[i] = 0; //被删除的数字全部赋值为0
b[j] = i; //删除的数字全部赋值给数组b
j++;
s = 0; //每次删除数字后s重新赋值为0
}
}
printf(“依次被删除的数字为:\n”,m,n);
for(i=0;i<m;i++)
printf("%d ", b[i]);
return 0;
}
数学思路:开始所有人都为1,被踢除后变为0,不计入以后循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值