- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
//zsl
//华为2014校园招聘第二道上机题
//杀人环问题
//总共 n 人排成一个圆环,按圆环顺序每次数到第m个人就杀掉,最后剩下谁?
//2013-09-14
//This is a stupid method to solve this problem.
//
#include stdio.h
#include string.h
#include stdlib.h
#define MAX_NUM 100 //最多能处理的人数是100 , 其实可以定的更大,随自己更改。
#define ALIVE 1
#define DEAD 0
#define DISPLAY 1
//要求的完成的函数
//入口参数: n -- 总共的人数
// m -- 每次数到第 m 个人就杀掉
//返回值 : 最后活着的人的编号
//
int survive(int n , int m)
{
int killedpos ; //杀掉某些人之后剩余的人开始/结束的编号
int lastcount ; //上一次杀人的位置
int next1; //下一个活着的人的位置
int countkilled; //统计杀掉的人数,,它最大值为 n - 1;
int count0tom;
int i , j ;
//设置用来显示杀人步骤的变量
#if DISPLAY
int k;
#endif
//
//构造一个字符串描述杀人环的生死状态
//活着的人-- 1,死的人-- 2
char people[MAX_NUM] = ;
//Initial
countkilled = 0;
for(i = 1; i = n + 1 ; i ++)
{
people[i] = ALIVE;
}
//begin killing
killedpos = 0;
do
{
//开始一轮循环,杀掉一个人
for(count0tom = 0 ,i = killedpos , j = i + 1; ; )
{
//每次数数开始都现计算出下一个活着的人的位置
//并从这个位置开始数数
for(j = i + 1; ; j ++)
{
//如果下一个位置指向了最后一个人的下一位,就从头开始数起
if( j == n + 1)
{
j = 1;
}
if(people[j] == ALIVE )
{
next1 = j;
break;
}
}
i = next1;
//开始数数了
if(people[i] = ALIVE )
{
count0tom ++;
//如果数到了m,则杀掉这个人,
//死掉的人数增加一个
//并且跳过开始下一轮数数
if(count0tom == m)
{
people[i] = DEAD ;
count0tom = 0;
killedpos = i;
countkilled ++;
//显示这一次谁被干掉了
#if DISPLAY
printf(\n第 %d 次判生死:\n , countkilled );
for(k = 1 ; k = n; k ++)
{
if(people[k] == ALIVE) //活着的人
{
printf( %d , k);
}
else
{
if( k == killedpos)
{
printf( $%d$ , k); //刚刚被杀的人
}
else
printf( _%d_ , k); //之前被杀的人
}
}
printf(\n----------------------------------------------\n);
#endif
//显示完毕
//如果死了 n-1 个,则跳出杀人数数
if(countkilled == n-1)
{
//break;
//找到活着的人的位置
for(j = 1; j = n people[j] == DEAD ; j ++)
{
}
return j;
您可能关注的文档
最近下载
- 森林抚育工程竣工验收资料.docx
- (2024)给水排水管道工程施工及验收规范.pptx VIP
- 语文课堂教学创新案例.docx VIP
- 中国马克思主义与当代 2024版 教材课后思考题答案.docx
- 最完整的贝加莱PLC培训教程(书签版).pdf VIP
- 景区开园大型活动仪式详细流程安排.pdf VIP
- 国家开放大学机考资料,04042分析化学(本)-先找这份资料(2).docx VIP
- 福建省厦门市三年(2020-2022)小升初语文卷真题分题型分层汇编-05现代文阅读(非连续性文本与记叙文与童话).pdf VIP
- 2015尔雅网络课程现代自然地理学期末考试试题及(王建).doc VIP
- 2023尔雅网络课程现代自然地理学期末考试试题及答案(王建).doc VIP
原创力文档


文档评论(0)