XidianOJ 1034 猴子吃桃

题目描述

猴妈妈给小猴子们准备了N个桃子,无数个小猴子排队去领桃子吃,排在第一个的领1个桃子,排在第二个的领2个桃子,排在第三个的领4个桃子,排在第四个的领8个桃子,以此类推,一旦桃子不够了,猴妈妈就把剩下的桃子给下一个猴子,然后其余的小猴子就得挨饿了^_^
现在,有一只小猴子想拿到最多的桃子,那么它应该排在第几个位置,又能吃到几个桃子呢?

输入

有多组输入数据,第一行为一个数字T,代表有T组输入数据 (0<T<=20)。
接下来有T行,每行一个正整数N(0<T<=10^9),表示猴子妈妈准备的桃子个数。

输出

一共T行。
对于每一组数据,输出两个数字,分别表示小猴子应该排在第几个位置上,能吃到几个桃子,若排在两个位置能吃到的桃子数一样,则输出排位靠前的位置号。

--正文
又是一道签到题
#include <iostream>
#include <cstdio>
#include <algorithm>
int max(int a,int b){
    if (a>b) return a;
    return b;
}
int main(){
    int T;
    scanf("%d",&T);
    int time;
    for (time=1;time<=T;time++){
        int n;
        scanf("%d",&n);
        int now = 1,sum = 1;
        int base = 1;
        while (n > sum){
            base *= 2;
            sum += base;
            now ++;
        }
        int max = n - sum + base;
        if ( base / 2 >= max) {
            now --;
            max = base / 2;
        }
        printf("%d %d
",now,max);
    }
    return 0;
} 
原文地址:https://www.cnblogs.com/ToTOrz/p/6066419.html