CSU 2018年12月月赛 G(2219): Coin
2024-08-30 18:31:56
Description
有这样一个众所周知的问题:
你面前有7个硬币,其中有一个劣质的(它比正常的硬币轻一点点),你有一个天平,问需要你需要使用天平多少次能保证找到那个劣质的硬币。
众所周知的算法是:
第一次 把7个硬币分成3+3+1一共3堆,把前两堆放到天平的两端,若天平平了说明第三堆即剩下的那一枚硬币是劣质的,否则劣质的硬币在较轻的那一堆。
第二次 把3个硬币分成1+1+1一共3堆,把前两堆放到天平的两端,若天平平了说明第三堆即剩下的那一枚硬币是劣质的,否则劣质的硬币是较轻的那一堆的那一个硬币。
综上一共需要两次。
那么如果是9枚硬币呢?
第一次 把9个硬币分成4+4+1一共3堆,把前两堆放到天平的两端,若天平平了说明第三堆即剩下的那一枚硬币是劣质的,否则劣质的硬币在较轻的那一堆。
第二次 把4个硬币分成2+2一共2堆,把这两堆放到天平的两端,天平必然会倾斜,说明劣质的硬币在较轻的那一堆。
第三次 把2个硬币分成1+1一共2堆,把这两堆放到天平的两端,天平必然会倾斜,说明劣质的硬币是较轻的那一堆的那个硬币。
综上一共需要三次。
现在,问题来了。要是摆在你面前的是n枚硬币,你需要用以上描述的这种算法操作多少次,才能保证找到那个劣质的硬币呢?
Input
一行一个正整数n,表示硬币的总数。
n < =109
Output
一行一个整数,表示需要使用天平多少次能保证找到那个劣质的硬币
Sample Input
7
Sample Output
2 题意:这题看过程就知道了,每次分成两堆,能整份两堆就是一人一半,不然就拿出一个,剩下的分成一人一半,然后最后剩到一人一个的时候(所以是>=2,不是>2)就知道谁轻了。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <math.h>
#include <set>
using namespace std;
int n,x,temp;
int main()
{
cin>>n;
int ans=;
while(n>=)
{
ans++;
n=n/;
}
cout<<ans<<endl;
return ;
} /**********************************************************************
Problem: 2219
User: therang
Language: C++
Result: AC
Time:4 ms
Memory:2020 kb
**********************************************************************/
最新文章
- mysql_connect() php7不支持,php5.5可以,是废弃函数
- noip模拟赛(10.4) 序列(sequence)
- php实现文件上传下载功能小结
- java环境搭建系列:JDK从下载安装到简单使用
- selenium—JS点击方法
- 先来个xmpp学习连接
- Java好文统计( 引用 )
- JavaEE参考示例 SpringSide 4.0 GA版杀青
- Oracle- 分页例子
- Windows 下Oracle database 9i 64bit 仅仅有 Windows Itanium 64bit
- Docker: How to enable/disable HTTP Proxy in Toolbox
- ruby读取源代码自身的一种方法
- [图形]图形API的两种模式
- openshift 容器云从入门到崩溃之十《容器监控-数据展示》
- centos7.2 安装 mysql5.7
- AEAI DP V3.8.0 升级说明,开源综合应用开发平台
- Cropperjs 插件知识点
- BZOJ 2878 【NOI2012】 迷失游乐园
- 一、JSON解析与字符串化
- 浅析C#中的IEquatable<;T>;接口