C++且不使用vector头文件完成:过年了可多要去给朋友送礼物。可多准备了若干个礼盒到达第一个朋友家时送出礼盒总数的二分之一这家主人还会回礼两份到达第二个朋友家时送出余下的二分之一并收获两个礼盒以此类推直到最后一个朋友家送出去 m 份结束。已知共有 n 家要保证每家朋友都能得到相应数量的礼盒那么最初需要至少准备多少呢?输入描述两个整数分别表示朋友家的个数 n 和最后一次送出的礼物份数 m。5=n
解题思路: 根据题目描述,我们可以得出如下规律: 第一家朋友收到礼盒的数量为总礼盒数量的二分之一,即 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。
具体实现步骤如下:
- 读取输入的n和m的值。
- 从m=1开始遍历,直到找到满足等式n/2^(m-1) = m的m值。
- 输出找到的满足条件的m值。
C++代码实现如下:
#include
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 著作权归作者所有。请勿转载和采集!