HNUST 1522 爱心苹果 (三分思想)

来源:互联网 发布:羽绒服推荐 知乎 编辑:程序博客网 时间:2024/05/16 12:43
题目描述

        SpringWater喜欢ZN好久了,每天都想见到她,可是又找不到理由约她,辗转反侧数日,终于等来了平安夜的节日。喜极而泣的SpringWater飞奔到了水果店,想买一个苹果送她,这样就可以顺便见她一面了。 


店里有好大一堆苹果;据老板透露,这堆苹果里有一个爱心苹果;其它普通苹果都比这个爱心苹果轻,并且普通苹果的重量都相同!因为SpringWater总是给予ZN最好的,所以SpringWater想从这一堆苹果里挑出那个最重的爱心苹果!水果店提供了一个可比较两堆苹果重量大小的天平秤(只有当天平秤的左右两边重量相等时,天平秤才会平衡;否则天平秤指针将偏向于重量较大的方向!)。


    但是让人恼火的是SpringWater最近在忙着搞网络编程去了,没有时间来从这么一大堆苹果里挑出这个爱心苹果,所以就向你求助了,当给定了这堆苹果的总数量,希望你帮他求出能在保证一定能挑出这个爱心苹果的前提下所需要的最少比较次数!


输入

 有多行数据,每一行为一个正整数N(1<=N<=1000),N表示这堆水果的总个数。

输出

 输出为了保证一定能挑出这个爱心苹果的最少比较次数。


样例输入
2
4

样例输出
1

2

思路:因为样例的诱导,认为是以2的倍数为基础进行判断,后来发现,实际上以3作为标准更简便,例:10 可以分为 3 3 4,如果3和3相等则比较 4,4分为2与2再比较,再分为1与1吗 如果3和3比较不等, 则找出大的一个,从4里面借一个普通的,4分为2与2再比较,再分为1与1,所以这个题目就利用了三分思想 ,转化成为3的幂的问题

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int main(){    int n,sum,a[15]={0,1};    for(int i=2;i<=8;i++)        a[i]=a[i-1]*3;    while(scanf("%d",&n)==1)    {        int sum=0;    for(int i=1;i<=8;i++)        if(n<=a[i]){         sum=i-1;         break;        }    if(n==1)        sum=0;       printf("%d\n",sum);    }    return 0;}






  



原创粉丝点击