数组的趣味应用-鲁智深吃馒头

鲁智深吃馒头

据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头。智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说: 从我开始报数(围成一圈),第5个人可以吃到馒头(并退下) ,按此方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上。请问他在那个位置? 

[分析]

    此问题和N人报数出圈问题实为同一问题, 具体的问题算法在f函数中已作说明.

#include<stdio.h>
#include<math.h>
#define N 100 /* 参加报数的人数 */
#define T 5/* 报数最大值 */
short f(short [], short, short);
int main()
{
    /* 初始N个人均没吃到馒头 */
    short monks[N];
    short i;
    /* 问题初始化 */
    /* N个数组元素代表着N个人, 数组下标对应每个人的下标 */
    /* 数组元素为1表示这个人已经吃到馒头, 为0则表示没吃到馒头 */
    for(i = 0; i < N; i ++)
    {
        monks[i] = 0;
    }
    printf("下标为%hd的人没吃到馒头.\n", f(monks, N, T));
}
/* 鲁智深吃馒头问题解决方案 */
short f(short m[], short n, short t)
{
    short i = 0;
    /* k记录当前有几个人吃到了馒头 */
    short k = 0;
    /* p记录当前的报数 */
    short p = 1;
    while(1)
    {
        i
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好梦成真Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值