找规律后用等比和公式判断区间,代码简陋,请多指点
凑出1 需要用 重量为 1 的砝码 使用数量为n = 1 总数 N = 1
2 需要用 重量为 1 2的砝码 使用数量为 n = 2
3 需要用 重量为 1 2的砝码 使用数量为 n = 2
4 需要用 重量为 1 3的砝码 使用数量为 n = 2 总数N = 3
5 需要用 重量为 1 2 3的砝码 使用数量为 n = 3
6 需要用 重量为 1 2 3的砝码 使用数量为 n = 3
......
13 需要用 重量为 1 3 9的砝码 使用数量为 n = 3 总数 N = 9
14 需要用 重量为 1 2 3 9的砝码数量为 n = 4
综上所得:使用最少的砝码组成的数字之间是有一定联系的。
我们可以从中发现只用一个砝码拼出1 ~ k的数字只有当k == 1时这一种情况。
而使用两个砝码拼出1 ~ k的数字,存在 2 ~ 4 三种情况
使用三个砝码拼出1 ~ k的数字,存在 5 ~ 13 九种情况
可以发现其中规律: 能用n个砝码组成数字的情况数量 = pow(3,N - 1)
那么我们就只需通过等比和公式求出k所在区间,来求出n的值。
k ∈((pow(3, i) / 2,(pow(3, i + 1) - 1) / 2]
如果k属于这个区间则输出 i + 1,不属于继续遍历即可。
C++ 代码
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int i, k;
cin >> k;
for (i = 1; ; i++)
{
if (k == 1)
{
cout << i;
return 0;
}
int t = (pow(3, i) - 1) / 2;
int r = (pow(3, i + 1) - 1) / 2;
if (t < k && r >= k )
break;
}
cout << i + 1;
return 0;
}
可以发现其中规律: 能用n个砝码组成数字的情况数量 = pow(3,N - 1)这里应该是pow(3,n-1)吧
这种真的就是打表找规律呗hhhh
2 需要用 重量为 1 2的砝码 使用数量为 n = 2?
不应该是
2 需要用 重量为 1 2的砝码 使用数量为 n = 1
吗
啊哈不太懂你的意思诶,不仅要凑出2还得凑出1呀
嗯,我想问的是,凑出重量2不是只需要1个重量为2的砝码吗
只用一个重量为2的砝码,能凑出2可是凑不出1呀