题目二:约瑟夫生者死者游戏
来源:互联网 发布:库卡焊接机器人编程 编辑:程序博客网 时间:2024/04/27 17:47
约瑟夫游戏的大意:30 个游客同乘一条船,因为严重超载,
加上风浪大作,危险万分。因此船长告诉乘客,只有将全船
一半的旅客投入海中,其余人才能幸免于难。无奈,大家只
。
加上风浪大作,危险万分。因此船长告诉乘客,只有将全船
一半的旅客投入海中,其余人才能幸免于难。无奈,大家只
得同意这种办法,并议定 30 个人围成一圈,由第一个人数
起,依次报数,数到第 9 人,便把他投入大海中,然后再从
他的下一个人数起,数到第 9 人,再将他投入大海中,如此
循环地进行,直到剩下 15 个游客为止。问:哪些位置是将
被扔下大海的位置?
不失一般性,将 30 改为一个任意输入的正整数 n,而报数
上限(原为 9)也为一个任选的正整数 k
#include<stdio.h>#include<string.h>typedef struct {int num[100]; // 数组保存各个人所在的位置 int die_num[100];// 保存该去掉的人 int size; // 船上还有的人数 int die_index;// 这时候去掉人的个数-1 int k; // 间隔K 个人 就该下船 int cur_p; // 算到的当前位置的 }people;void init( people &n, int t, int k ){ // 初始化 n.size=t; n.k=k; n.die_index=0; n.cur_p=0; for( int i=0; i<t; ++i ) n.num[i]=i+1;}int get_next_die( people &n){ // 找到下一个下船的位置 int pos=n.cur_p; int end=n.k; for( int i=1; i<end; ++i ) { pos=(pos+1)%n.size;} n.cur_p=pos;return pos;}int put_out_person( people &n ){ int i=n.cur_p; n.die_num[n.die_index]=n.num[i]; n.die_index+=1;if( n.size<=0 ) return 0;for( ; i < n.size; ++i ) n.num[i]=n.num[i+1];n.size-=1;return 1;}int save( people &n ){while( n.size > 15 ){ get_next_die(n);put_out_person(n);}return 1;}void print(people &n){for( int i=0; i<n.die_index; ++i ) printf("%d ",n.die_num[i]); printf("\n");}int main(){people t;int n,k;scanf("%d%d",&n,&k);init(t,n,k);//printf("%d %d\n",t.size, t.k);save(t);print(t);return 0;}
。
0 0
- 题目二:约瑟夫生者死者游戏
- 《约瑟夫生者死者游戏》算法 C语言版
- 约瑟夫环生者死者游戏(JAVA)
- 数据结构——约瑟夫生者死者问题
- 约瑟夫游戏
- 约瑟夫游戏
- 约瑟夫游戏
- 《安德的游戏》和《死者的代言人》
- 嫌疑人系死者的二姐夫因经济纠纷作案
- 【题目33】约瑟夫环
- 题目1188:约瑟夫环
- 题目1188:约瑟夫环
- 题目1188:约瑟夫环
- 题目1188:约瑟夫环
- 题目1188:约瑟夫环
- 一道约瑟夫的题目
- NYOJ 题目191小珂的游戏(数学,约瑟夫环)
- 【国外SQL注入关键字整理】为逝去的国人默哀!死者已逝,生者当强!低吟往事。。。
- Online Coding
- Solr集群搭建
- linux创建用户、设置权限
- Discuz!开发之模板标签语法学习
- 折半插入排序
- 题目二:约瑟夫生者死者游戏
- 【Asp.Net MVC】Controller和View之间传递数据
- java a=b是线程安全的吗
- Friends number (筛法打表求因子,水题)
- Scala学习--函数式编程
- 变量的位屏蔽
- Discuz!开发之字符串处理函数dhtmlspecialchars介绍
- 卡方检验思想及其应用
- 学习MVC之租房网站(一)-项目概况