求指教 递归法

宫崎柊吾 2019-03-20 05:00:15
已知有16个硬币 当中有一个假的硬币 假的比较轻 用递归法最少次数找出假硬币
...全文
137 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
636f6c696e 2019-03-21
  • 打赏
  • 举报
回复
仅供参考
#include <stdlib.h>

int max(int a, int b, int c)
{
    if (a > b) {
       if (a > c) {
            return a;
       }
       else {
           return c;
       }
    }
    else {
       if (b > c) {
           return b;
       }
       else {
           return c;
       }
    }
}

int func(int num)
{
    if (num == 1 || num == 0) {
        return 0;
    }
    if (num == 2) {
        return 1;
    }

    int temp = (num % 3 == 0) ? num / 3 : num / 3 + 1;

    return max(func(temp), func(temp), func(num - temp * 2)) + 1;
}

int main() {
    int num;
    scanf("%d", &num);
    printf("%d\n", func(num));
    return 0;
}
jiht594 2019-03-21
  • 打赏
  • 举报
回复
这得有条件吧。
要不循环一次、就出结果了。所以1次
636f6c696e 2019-03-20
  • 打赏
  • 举报
回复
信息论,每次称有左边重、右边重、平衡 三种可能,也就说信息量为3,3次的信息量是3^3=27>16 因此最多3次就可以找出假硬币
宫崎柊吾 2019-03-20
  • 打赏
  • 举报
回复
有想法 但是写不出来
宫崎柊吾 2019-03-20
  • 打赏
  • 举报
回复
引用 1 楼 早打大打打核战争的回复:
最多三次...
怎么做啊 我不懂 才开始学习 没头绪
  • 打赏
  • 举报
回复
最多三次...

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧