鱼C论坛

 找回密码
 立即注册
查看: 3865|回复: 8

[趣题] 小仙趣题分享-38

[复制链接]
发表于 2014-9-7 10:04:25 | 显示全部楼层
本帖最后由 andalousie 于 2014-9-7 10:13 编辑

@拈花小仙 小仙姐,这道题是编程题吧,数有点大。
1) 由于4和5互质,从20以内的数里面可以找到唯一能整除4且除以5余一的数,也就是16;根据中国剩余定理,可以知道任何20m+16 (m是自然数)都满足“能整除4且除以5余一”这一条件。
2) 在前面五次拿椰子以后,剩下的椰子数都满足上面1)中的条件。所以每次拿剩下的椰子数应为20m+16。
3) 假设其中一次后剩下的为20k+16,那么分之前必然是25k+21。而这又是上一次分剩下的。于是需要满足:
CodeCogsEqn.jpg
于是得到:
CodeCogsEqn.jpg
此外,可以得到,分之前的k'的值与分之后的k值之间的关系为
CodeCogsEqn.jpg
->于是,我写了一个程序来进行求解
  1. #include <iostream>

  2. int mem;

  3. bool check_it(int k) {
  4.     bool result = true;
  5.     mem = k + k / 4 + 1;
  6.     for (int i = 0; i < 4; ++i) {
  7.         if (mem % 4 != 3) {
  8.             result = false;
  9.             break;
  10.         }
  11.         mem = mem + mem / 4 + 1;
  12.     }
  13.     return result;
  14. }

  15. int main() {
  16.     int base = 3;
  17.     while (!check_it(base)) {
  18.         base += 4;
  19.     }
  20.     std::cout << 20 * mem + 16 << std::endl;
  21. }
复制代码
得出的结果是62496
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-9-7 23:01:21 | 显示全部楼层
看这个程序,有人能告诉我是为什么的吗
  1. #include <iostream>

  2. int main() {
  3.     int mem = 3;
  4.     for (int i = 0; i < 4; ++i) {
  5.         mem = 5 * mem + 4;
  6.     }
  7.     mem = mem + mem / 4 + 1;
  8.     std::cout << 20 * mem + 16 << std::endl;
  9. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-2 04:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表