加斯帕《数目的游戏问题》
来源:互联网 发布:淘宝店邮费一般多少 编辑:程序博客网 时间:2024/06/06 09:17
【问题描述】
17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:
15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余
的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人
开始依次报数,每数到第九个人就将他扔入大海,此循环进行直到仅余
15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。
【问题分析】
从问题的描述中可以得知:程序最终应该输出非教徒在排序中所站的位置。则需考虑:
在这个程序中,处理的主要数据是非教徒是否跳入海中。因而启发我们用0和1表示人的状态:0表示还在船上;1表示已经跳入海中。则用int
作为数据类型。又由于需要筛选出跳入海中的非教徒,所以需要将这30个人组织在一起形成批量数据,以便共同参与及筛选。此处则可选用一维数组完成。
【关键问题】
对于计数,我们可以从第一个还未扔下海的人开始进行计数,每数到9时,将该元素的值改为1,表示该人已经被扔下海。接着重置number,再数到9。这样循环直到扔下海15个人为止。
【代码如下】
#include<stdio.h>void main(){ int person[30] = {0};//表示30个人都还在船上 int i=0; int number=0;//表示数到9跳下去 int counter=0;//表示跳下去的人数 do{ if(person[i%30] == 0) number++; if(number == 9){ person[i%30] = 1; counter++; number = 0; } i++; }while(counter<15); printf("需要跳下去的人是:"); for(i=0;i<30;i++){ if(person[i] == 1) printf("%d\t",i+1); }}
【运行结果】
1 0
- 加斯帕《数目的游戏问题》
- 数目的游戏
- 苹果的数目问题
- 使用递归来解入出栈的数目问题
- 关于ORACLE Statement 对象的数目问题
- nginx的worker数目进程设置问题
- [计算力] 苹果的数目问题
- 等值数目问题
- 羊数目问题
- 问题七十五:等值数目。
- 支配值数目问题
- 等值数目问题
- 【算法】母牛数目问题
- 支配值数目问题
- c语言中处理不定参数数目的问题
- 有关Linux进程与线程数目计算的问题
- 区间内出现某个数k次的数目问题
- 【Android 组件】Gridview 一行显示几个数目的问题
- 在Python中一步一步实现Principal Component Analysis(PCA)
- AndroidStudio 函数提示参数快捷键
- 利用百度搜索引擎解决安装谷歌插件问题
- c++简单24点游戏
- 第二讲 Groovy语言基础
- 加斯帕《数目的游戏问题》
- Android开发艺术探索学习摘要(二)
- 关于跨域
- codeforce 748B map 应用
- RESTful服务最佳实践——(十二)
- i++是否原子操作?并解释为什么?
- poj 2352 Stars(树状数组)
- Go语言学习之net/http包(The way to go)
- 如何理解和应用闭包