Nepire的校OJ入门题解—17蓝桥选拔篇(七)

欢迎来到Nepire的校OJ入门题解——————17蓝桥选拔篇(七)

这次我主要是讲解第⑨届蓝桥杯全国软件和信息技术专业人才大赛校内选拔赛的七道题目,中间可能会扯到一些其他东西,然后就开始我们的入门题解吧呜喵

Problem G:吐槽

Description

“出题人你出的都是什么破题?”
“谁出的?我没出过。既然你这么说了,那我就出一题吧。”
n瓶酒中有一瓶有毒,现在用小白鼠测试。如果小白鼠喝到有毒的酒,那么过1小时就会死亡,而你只有1小时的时间,要想测出哪瓶酒有毒,至少需要多少只小白鼠?

Input

输入数据第一行是一个整数T(T <= 100),表示有T组测试数据。
每组数据输入一个整数n(0 < n <= 100000)。

Output

每组数据输出一行,一行输出一个整数,表示答案。

Sample Input

2
2
3

Sample Output

1
2

Source

解题思路

小Nep觉得这题可能是这次考试中解法最抽象的可能一次讲不清,就发现哪里不对再往上填东西,可以把小老鼠的生或死看作1或0,那么n瓶酒编号1-n的二进制表示法所需要的 最大位数为x 。
(2^x>=n且2^(x-1)小于n)

参考代码

#include <ctype.h>
#include <errno.h>
#include <float.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <wchar.h>
#include <wctype.h>
#include <assert.h>
#include <limits.h>
#include <locale.h>
#include <math.h>
int main()
{
    int n,i,t;
    double ans;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        ans=log2(n)-(int)log2(n);
        if(ans==0)
        {
            printf("%d\n",(int)log2(n));
        }
        else
        {
            printf("%d\n",(int)log2(n)+1);
        }
    }

    return 0;
}

下次可能就是一些杂题了,嗯,爆肝一波去健身。

——Nepire

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页