终于完成了Josephus的C语言实现啦~~
/*以下程序用来解决Josephus问题,现在只是完成了M>N的情况,2015-08-20 22:22:20*/
/*发现一个问题:数组的赋值问题:char People[N]={1};并不代表所有的元素都是1啊,要确保全都是1,务必使用char People[N]={1,1,1,1};或者采用循环给数组赋值*/
#include <stdio.h>
#include <math.h>
#define N 10 //
#define M 3 //
main(void)
{
char p,People[N];//1 means alive 0 means died
for(p=0;p<N;p++)
{
People[p]=1;
}
int Last=N,j=0,k=0,Temp=0;
if(M>N)
{
while(Last!=0)
{
j=(M%Last)-1;//需要从当前的值移动的总次数(要排除掉已经为0的元素)
if(j>0)
{
for(k=1;k<=j;)
{
Temp++; //当前的值自加得到下一次的数组元素值
if(Temp>N-1) {Temp=0;}
if(People[Temp]!=0) {k++;} //如果下一个元素的值为0 ,那么k就不会变化
}
}
else
{
for(k=1;k<=abs(j);)
{
Temp--; //当前的值自减得到下一次的数组元素值
if(Temp<0) {Temp=N-1;}
if(People[Temp]!=0) {k++;} //如果下一个元素的值为0 ,那么k就不会变化
}
}
printf("People rank %d is died\n",Temp+1);
k=Temp+1;
for(k;People[k]==0;k++)//要确定下一个其实元素的值,下一个元素的值不能是0,而是第一个1
{
if(k>N-1) {k=0;} //倘若k大于N-1时,就需要将k赋值为0避免溢出
}
Temp=k;
Last--;
}
}
else
{
while(Last!=0)//N4 M2
{
for(k=1;k<=M-1;)
{
Temp++; //当前的值自加得到下一次的数组元素值
if(Temp>N-1) {Temp=0;}
if(People[Temp]!=0) {k++;} //如果下一个元素的值为0 ,那么k就不会变化
}
People[Temp]=0;
printf("People rank %d is died\n",Temp+1);
k=Temp+1; if(k>=N) {k-=N;}
for(k;People[k]==0;k++)
{
if(k>N-1) {k=0;}
}
Temp=k;
k=1;
Last--;
}
}
return 0;
}
注:若要改变起始位置,比如从第K个人开始,则Temp=K-1;
终于完成了Josephus的C语言实现啦~~的更多相关文章
- 递归转手工栈处理的一般式[C语言]
是任意形式的递归,是化解的一般式. 主题所谓的“递归调用化解为栈处理”,意思是,将递归函数调用化解为“一个由stack_push stack_pop stack_top等函数调用组成的循环式子”.这里 ...
- 【转】R语言知识体系概览
摘要:R语言的知识体系并非语法这么简单,如果都不了R的全貌,何谈学好R语言呢.本文将展示介绍R语言的知识体系结构,并告诉读者如何才能高效地学习R语言. 最近遇到很多的程序员都想转行到数据分析,于是就开 ...
- 趣谈编程史第2期-这个世界缺少对C语言的敬畏,你不了解的C语言科普
这是我制作的编程语言科普系列视频的第二期,博客根据视频文案整理而成,提供给有需要的朋友阅读或使用. 视频地址:https://www.bilibili.com/video/av83627932/ ...
- Ryu
What's Ryu? Ryu is a component-based software defined networking framework. Ryu provides software co ...
- Erlang 的新数据结构 map 浅析
更新:文中示例代码直接从Joe的新版 Erlang 书中摘抄而来,其中模式匹配的代码有错误,现已纠正.应该用 := 匹配字段,而不是 => . 即将发布的 Erlang 17 最大变化之一包括新 ...
- 粗看ES6之面向对象写法
标签: es6 在es6以前,js没有类的概念,虽然有构造函数原型的方式用来做面向对向开发,但是对于书法并不是十分友好,而且对于继承实现也不是十分友好. es6引入class constructor ...
- VIM正则表达式查找替换
0. 一些需要注意的不同 VIM中的正则表达式和其他的有点不一样 (1) 有些符号要用\转义,比如\+表示重复一次或以上,其他的还有一些,:h pattern查看(2) 非贪婪匹配用\{-}, 如 ...
- Visual Studio使用技巧 +谷歌浏览器使用技巧总结
一.总结下visual studio常用的使用技巧,有助于提高效率: 1.给代码行打标记: ctrl + K :给行打标记:ctrl + K + N:切换标记,即使当前页关闭了,也可以适用此快捷键快 ...
- 国内最具影响力科技创投媒体36Kr的容器化之路
本文由1月19日晚36Kr运维开发工程师田翰明在Rancher技术交流群的技术分享整理而成.微信搜索rancher2,添加Rancher小助手为好友,加入技术群,实时参加下一次分享~ 田翰明,36Kr ...
随机推荐
- 【循序渐进学Python】12.Python 正则表达式简介
正表达式就是一段匹配文本片段的模式,在Python 中 re 模块包含了对正则表达式(regular expression)的支持. 1. 正则表达式的基本概念 1. 通配符 点号( . )可以匹配换 ...
- AC自动机---Keywords Search
题目网址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/A Description In the moder ...
- hibernate初步4
JPA 1.JPA概述 JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.,而Hi ...
- ASP.NET Boilerplate 深入系列之:概述
因为项目需要,最近个人购买了一直在研究的ABP框架的一个Regular Licience,马上要用到一个实际的项目中,为了能够准确把握该框架涉及到设计思想.使用模式.内在实现细节.准备在接下来的一个月 ...
- 关于setInterval和setTImeout中的this指向问题
前些天在练习写一个小例子的时候用到了定时器,发现在setInterval和setTimeout中传入函数时,函数中的this会指向window对象,如下例: var num = 0; function ...
- jquery 监控文本框键盘事件(回车事件),附常用keycode值。
$(function(){ $(".search").keydown(function(event) { ) { //执行操作 } }) ); 完整的 key press 过程分为 ...
- javascript数组浅谈1
最近心血来潮要开始玩博客了,刚好也在看数组这块内容,第一篇就只好拿数组开刀了,自己总结的,有什么不对的地方还请批评指正,还有什么没写到的方面也可以提出来我进行完善,谢谢~~ 首先,大概说说数组的基本用 ...
- Sql server 2008 R2 配置管理工具服务显示远程过程调用失败:0x800706be
Sql server 2008 R2 配置管理工具服务显示远程过程调用失败:0x800706be 今天在其他电脑配置 SQl server 2008 R2,安装完成后,发现打开配置管理工具服务 : ...
- iOS edgesForExtendedLayout、extendedLayoutIncludesOpaqueBars、automaticallyAdjustsScrollViewInsets属性详解
edgesForExtendedLayout: 在IOS7以后 ViewController 开始使用全屏布局的,而且是默认的行为通常涉及到布局,就离不开这个属性 edgesForExtendedLa ...
- sql 存储过程中top 后面跟参数的问题
之前存储过程中有top的情况,都是拼接sql,然后通过exec执行,进行查询结果,很不方便. 今天研究了,原来top后面是可以直接写参数的. 只需要top 后面的参数加上小括号就好了 eg: TOP ...