复制粘贴

【题目描述】
kkk最近才学会输出语句,非常兴奋,就要输出N行“6”来表达她的兴奋。但是一条一条语句打呢又太慢,所以kkk就想到了——复制&粘贴!
当然一开始kkk会先打出一条输出语句,然后她可以选择复制粘贴。每次kkk可以复制1~t条语句(其中t表示当前的输出语句数)并粘贴。那么kkk最少需要复制几次才能写出N行“6”呢?
【输入格式】
有多组数据,每组数据包含一个整数N表示要输出多少行
【输出格式】
对于每组数据输出最少的复制次数
【样例输入】
2
10
【样例输出】
1
4
【数据范围】
1<=N<2^32
【分析】
不难发现,为了追求复制次数最少,应该使每一次复制的行数最大化,也就是每一次粘贴后就全选再复制。
如果输入数据恰好是2的x次方,复制的次数就是x。如果不是,就令x为2^x小于输入数据的最大整数,答案就是x+1。

var
  n,t,ans:qword;
begin
  while not eof do begin
      read(n);
        ans:=0;
        t:=1;
        while t*2<=n do begin
          t:=t*2;
            inc(ans);
        end;
        if t<n then inc(ans);
        writeln(ans);
    end;
end.
posted @ 2016-10-06 18:27  JRX2015U43  阅读(160)  评论(0编辑  收藏  举报