题目描述
猴妈妈给小猴子们准备了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; }