鲁智深吃不到馒头

mac2022-06-30  116

鲁智深吃不到馒头

1 问题导向

最近遇到一个问题,大致是这样:鲁智深到一个寺庙,寺庙里有连同住持、小和尚在内共99人,99个馒头。 鲁智深想吃馒头,住持不想分馒头给他,于是住持设计了一个游戏:他们100个人围成一圈坐着,从某个和尚开始数数: 1 、 2 、 3 、 4 、 5 1、2、3、4、5 12345,数到数字 5 {\color{Red}{5}} 5 的人可以吃到馒头,并且出列。下一位继续从 1 开始数数,数到数字 5 {\color{Red}{5}} 5 的人可以吃到馒头,并且出列,下一位继续从 1 开始数数…以此类推。 请问住持改把鲁智深安排在第几号座位上,才能使他吃不到馒头,不能出列?(假设座位号总数=人数)

2 思考

如果思考素数筛选的方法,似乎可以把这个位置晒出来。当然,模数运算也有用。 总共有100个人,座位号有1~100,初始值都可以设为1;99个馒头,假设吃到馒头的人,其值可以设为0;必须要有计数5的一个计数器,并且要会循环。

3 代码

#include<iostream> using namespace std; int main(){ int index[100]; // 100个位置,100个索引 for(int i = 0; i < 100; i++){ index[i] = 1; // 假设值都为 1 } int num = 1; // 吃到馒头的人,应该为 99,起始为 1 int count = 0; // 记录数的数字 1~5 for(int i = 0; num < 100; ++i){ count += index[i%100]; //利用模数运算,为了保证转一圈后索引不变 if(count == 5){ // 数到 5 停一下 index[i%100] = 0; // 这个位置上的人出列了 num++; // 吃到馒头了 count = 0; // 出列一个人后,重新数数 } } for(int i = 0; i < 100; i++){ if(index[i])cout << i+1 << endl; // 输出位置 } return 0; }
最新回复(0)