悔恨摩羯


私信TA

用户名:y2810060752

访问量:111

签 名:

等  级
排  名 3994
经  验 1684
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 东莞理工学院
专  业

  自我简介:

解题思路:通过对比本轮死人的编号和下一轮死人的编号来变更幸存者的编号

例如:

4人,从第1个人开始报数,报数为3的情况                                                                                                    幸存者本来的编号为1

第一轮(4,1),死人为3号,3<3,从3号开始报数(因为在下一轮中4号已经变成3号)           从下一轮返回的幸存者为1号,本轮死人为3号,1<2,不用+1

第二轮(3,3),死人为2号,2<3;从2号开始报数                                                                从下一轮返回的幸存者为1号,本轮死人为2号,1<2,不用+1

第三轮(2,2),死人为2号,2-1=1,最后一轮了,返回幸存者1号;


注意事项:

参考代码:

#include<stdio.h>

int yveh(int x,int y)

{

    int n=3-1,i=1,tem=0,tem1=0;

    while(y+i*n>x)

    i--;

    if(y==y+i*n)

    tem=y+n-x;

    else

    tem=y+i*n;//判断死人的编号是多少

    if(x-1==1)//判断是否死剩一个

    return tem!=1?1:2;

    if(tem==x)//判断下一轮从谁开始

    tem1=1;

    else

    tem1=tem;

    y=yveh(x-1,tem1);//获取下一轮死人的编号

    return y<tem?y:y+1;//如果下一轮死亡的编号比这一轮的小就让编号加一

}


int main()

{

    int x1=0;

    scanf("%d",&x1);

    printf("%d",yveh(x1,1));

    return 0;

}


 

0.0分

1 人评分

  评论区