永发信息网

有关约瑟夫环问题的数学公式!求大神指导!

答案: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; }运行无错误,
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯