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

来源:互联网 发布:电脑pe手动备份数据 编辑:程序博客网 时间:2024/05/29 16:43

欢迎来到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