解题思路: 根据题目描述,我们可以得出如下规律: 第一家朋友收到礼盒的数量为总礼盒数量的二分之一,即 n/2 第二家朋友收到礼盒的数量为上一家朋友送出的剩余礼盒数量的二分之一,即 (n/2)/2 = n/4 第三家朋友收到礼盒的数量为上一家朋友送出的剩余礼盒数量的二分之一,即 (n/4)/2 = n/8 ... 第m家朋友收到礼盒的数量为上一家朋友送出的剩余礼盒数量的二分之一,即 (n/2^(m-1))/2

根据上述规律,我们可以得到最后一家朋友收到礼盒的数量为 n/2^(m-1),而且最后一家朋友收到的礼盒数量要等于m。

所以,我们可以得到以下等式: n/2^(m-1) = m

我们可以通过遍历m的值,从1开始尝试,直到找到满足上述等式的m。

具体实现步骤如下:

  1. 读取输入的n和m的值。
  2. 从m=1开始遍历,直到找到满足等式n/2^(m-1) = m的m值。
  3. 输出找到的满足条件的m值。

C++代码实现如下:

#include using namespace std;

int main() { int n, m; cin >> n >> m;

int result = -1;
for (int i = 1; i <= m; i++) {
    if (n / (1 << (i - 1)) == m) {
        result = i;
        break;
    }
}

cout << result << endl;

return 0;

原文地址: https://www.cveoy.top/t/topic/ieMB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录