假币问题

居然有假币!!!

事情是这样的,现在猪肉涨了,但是农民的工资却不见涨啊,没钱怎么买猪肉啊。蒜头君这就去买猪肉,结果找来的零钱中有假币!!!可惜蒜头君一不小心把它混进了一堆真币里面去了。

现在知道假币的重量比真币的质量要轻,所有真币的重量是一样的。

现在包含假币一共有 nn 张纸币,然后有一个天平,蒜头君设计一个找假币的方案。

如果有偶数张纸币,把所有的钱分成两份,用天平称一下,哪边轻假币就在哪边。

如果有奇数张纸币,先随机抽出一张,然后把所有的钱分成两份,用天平称一下,哪边轻假币就在哪边。如果两边一样轻,那么抽出来的就是假币。

按照这样的方案一直找下去,一定能找到假币。

那么最坏情况下,需要使用天平称称多少次。

输入格式
输入一行一个整数 n (1 \le n \le 2^{30})

输出格式
输出一行一个整数,表示最坏情况下使用天平称的次数。

输出时每行末尾的多余空格,不影响答案正确性

样例输入1
3
样例输出1
1
样例输入2
12
样例输出2
3
题意:
在最坏情况下找出假币;
解题思路:
如果有偶数张纸币,把所有的钱分成两份,用天平称一下,哪边轻假币就在哪边。
n=n/2;
ans++;
如果有奇数张纸币,先随机抽出一张,然后把所有的钱分成两份,用天平称一下,哪边轻假币就在哪边。如果两边一样轻,那么抽出来的就是假币。
n=(n-1)/2;
ans++;
假如在最坏情况在奇数张纸币抽出来的就永远不会是假币
Accept Code:

#include <stdio.h>
int main()
{
	int n,ans=0;
	scanf("%d", &n);
	if(n==1)
	ans=1;
	while(n!=1)
	{
		if(n%2==0)
		n=n/2;
		else
		n=(n-1)/2;
		ans++;
	}
	printf("%d\n", ans); 
	return 0;
 } 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮皮皮皮皮皮卡乒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值