请问屋子里有多少人

今天群里聊天,有人出了一道数学题,当然这道题对某些人来说可能有些老了,我自己以前也见过这道题,但从来没有仔细地想过如何解答,今天认真地想了一下,找出了自认为比较聪明的解答方法,呵呵。

题目:
    屋子里有若干人和若干个桌子,
    如果3人一桌,多2人;
    如果5人一桌,多4人;
    如果7人一桌,多6人;
    如果9人一桌,多8人;
    如果11人一桌,正好。
    请问这屋子里多少人?

解答:
补一个人,则结果为:
3人,正好
5人,正好
7人,正好
9人,正好
11人,多一个人
由于3,5,7,9的最小公倍数是315,因此肯定是315的整数倍-1
因为315/11余7,而8×7=56,除以11正好余1,因此肯定是315×8-1=2520-1=2519

这只是最小的解,要找出更大的解,实际上是在7的倍数里找除11余1的数。感兴趣的朋友可以试着找找看是否还有更大的解。



  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
屋子的人数为23时,其中两个人生日相同的概率大于50%。这是因为在23个人中,存在253种不同的生日组合,而365天的生日只有一年中的天数,因此生日相同的概率较高。 至于时空权衡中的散列法,它是一种常用的数据结构,用于快速查找和插入数据。其基本思想是将数据元素映射到一组固定大小的桶中,而桶的大小通常是根据数据元素的数量和散列函数的性质来确定的。散列函数将数据元素映射到桶中,而桶中可能存储多个数据元素,需要通过链表或其他数据结构来解决冲突。 下面是使用C++实现散列法的代码示例: ```c++ #include <iostream> #include <unordered_set> using namespace std; int main() { int n = 1; double p = 1.0; while (p > 0.5) { n++; p *= (365.0 - n + 1) / 365.0; } cout << "At least " << n << " people are needed to have a probability greater than 50% that two people have the same birthday." << endl; // 使用散列法查找重复生日的例子 unordered_set<int> birthdays; int birthday; while (true) { cout << "Enter a birthday (1-365), or 0 to exit: "; cin >> birthday; if (birthday == 0) break; if (birthdays.count(birthday)) { cout << "Duplicate birthday!" << endl; } else { birthdays.insert(birthday); cout << "No duplicate birthday yet." << endl; } } return 0; } ``` 这段代码首先计算了需要多少人才能使两个人生日相同的概率大于50%,然后演示了如何使用C++的unordered_set类来实现散列法查找重复生日。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值