方法一
#includeint main(){ int n,i,a,b; while(scanf("%d",&n)!=EOF&&n!=0){ i=0; //还没有开始称重i应该赋值为0 while(n>1){ //大于一枚的时候一定要称 n>1 n=n/3;/*由于你要考虑的是最少称重的次数//所以直接取总数的三分之一就可以了(只是因为有最少次数的条件,所以才能这样 ,不然还得考虑不能整除时候多出来的硬币)//以上代码直接取n=n/3就可以了*/ i++; }printf("%d\n",i); } return 0;}
方法二
#include #include int main(void){int n;int res;double tmp;while ((std::cin >> n) && n){tmp = log(n)/log(3);res = (int)tmp;if( tmp > res && tmp < res + 1 ) res++;std::cout << res << std::endl;}return 1;}
方法三
#include#includeint main(){ int n; while(scanf("%d",&n),n) printf("%.0lf\n",ceil(log(n)/log(3.0))); return 0;}