解题思路:通过对比本轮死人的编号和下一轮死人的编号来变更幸存者的编号
例如:
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 人评分
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1055 |
简单的a+b (C语言代码)浏览:783 |
时间转换 (Java代码)浏览:617 |
A+B for Input-Output Practice (VI) (C++代码)浏览:445 |
【蟠桃记】 (C语言代码)浏览:711 |
简单的a+b (C语言代码)浏览:674 |
DNA (C语言描述,数据结构)浏览:909 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1496 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:826 |
买不到的数目 (C语言代码)浏览:3134 |