有关约瑟夫环问题的数学公式!求大神指导!
答案:2 悬赏:0 手机版
解决时间 2021-01-26 15:51
- 提问者网友:心牵心
- 2021-01-26 01:23
用这个数学公式可以算出来:
#include
#include
main()
{
int n, m, i, s=0;
printf("N="); scanf("%d", &n);
printf("M="); scanf("%d", &m);
for(i=2; i<=n; i++)
s=(s+m)%i;
printf("The winner is %d\n", s+1);
system("pause");}
但是题目要求把中间的编号也要输出来
这是题目:
输入:
5 (n个人报数,n=5)
3 (报数m=3)
输出:
No1: 3 (第1个退出圈子的人编号是3)
No2: 1 (第2个退出圈子的人编号是1)
No3: 5 (第3个退出圈子的人编号是5)
No4: 2 (第4个退出圈子的人编号是2)
Last No is: 4 (最后一个人的编号是4)
求教怎么用这个数学公式可以输出中间的编号?
谢谢大神啦!!!!
最佳答案
- 五星知识达人网友:第四晚心情
- 2021-01-26 02:18
这个公式算不出来
全部回答
- 1楼网友:舊物识亽
- 2021-01-26 03:47
#include<stdio.h>
typedef struct
{
int password;
int num;
}list;
int main(void)
{
int i=1,n,fpassword,j,t=1,flag=1;
list a[100];
printf("请输入总人数:");
scanf("%d",&n);
printf("请输入初始密码:");
scanf("%d",&fpassword);
for(i=1;i<=n;i++)
{
printf("请输入第%d个人的密码:",i);
scanf("%d",&a[i].password);
a[i].num=i;
}
printf("\n\n");
for(i=1;i<=n;i++)
printf("%d %d\n",a[i].num,a[i].password);
printf("\n\n");
i=0;
//减法
while(n)
{
i=i+fpassword;
while(i>n)
i=i-n;
// printf("%d ",i);
printf("%d个人的密码是%d\n",a[i].num,a[i].password);
fpassword=a[i].password;
for(j=i;j<n;j++)
{
a[i].num=a[i+1].num;
a[i].password=a[i+1].password;
}
i--;
n--;
}
return 1;
}运行无错误,
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯