有假币
时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)
题目描述
居然有假币! 现在猪肉涨了,但是农民的工资却不见涨啊,没钱怎么买猪肉啊。nowcoder这就去买猪肉,结果找来的零钱中有假币!!!可惜nowcoder一不小心把它混进了一堆真币里面去了。只知道假币的重量比真币的质量要轻,给你一个天平(天平两端能容纳无限个硬币),请用最快的时间把那个可恶的假币找出来。
输入描述:
1≤n≤2^30,输入0结束程序。
输出描述:
最多要称几次一定能把那个假币找出来?
输入例子:
3 12 0
输出例子:
1 3 PS:分3份(分3份比2份的找到硬币所需次数少),当硬币不是3的倍数时,可能余数为1或者2, 假设余1,最多的那一份继续分,假设余2,两份最多的其中一份继续分,因为是要求最多的次数, 两种情况均满足n=n/3+1 什么时候结束循环?如果n=3,则为1结束循环,若为4,则为0的时候结束循环 若为5时,也同样为0的时候结束循环,所以总结得出n为0或者1的时候结束循环
#include<stdio.h>
int fun(int n)
{
int cnt=0;
while(n>1)
{
if(n%3!=0)
n=n/3+1;
else
n=n/3;
cnt++;
}
return cnt;
}
int main()
{
int n,i,t;
while(scanf("%d",&n)!=EOF&&n!=0)
{
printf("%d\n",fun(n));
}
return 0;
}