最少砝码/砝码天平类规律

Posted m0_66113251

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最少砝码/砝码天平类规律相关的知识,希望对你有一定的参考价值。

题解:

其实这道题考的就是规律,只要找到规律这道题就是相当于加减乘除的难度级别了。但题目给出的样例混淆了人们的思维方式。

1个砝码只能称1这个重量,所以此时能称重的最大重量为1;

两个砝码时有以下情况:

1,2:1 = 1,2 = 2,3 = 1+2最大能称重到3;

1,3:1 = 1,2 = 3-1,3 = 3,4 = 1+3最大能称重的重量到4;

1,4:1 = 1,2无解,所以从4往后都都无法计算出2的重量。

所以两个砝码时,即(1,3)能称重的最大重量为4。

然后一次往后递推,可以得出三个砝码时(1,3,9)能称重的最大重量为13。

所以如下图,容易得出新增砝码的重量等于上一个砝码重量的三倍,最大重量就等于增加最后的砝码之前最大重量加上新增的砝码重量。

砝码数量:count每次递增一

砝码重量:weight *= 3 ,即上一个砝码的三倍重量即为新增砝码的重量

最大重量:total += weight,即增加砝码之前的最大重量加上新增砝码的重量

## 解题思路

请填写解题思路

```
import os
import sys

# 请在此输入您的代码
n=int(input())
count=1
weight=1
maxNum=1
while maxNum<n:
  count+=1
  weight*=3
  maxNum+=weight 
print(count)
```

LQ0086 最少砝码迭代

题目来源:蓝桥杯2021初赛 C++ C组J题

题目描述
你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于N的正整数重量。
那么这套砝码最少需要包含多少个砝码?
注意砝码可以放在天平两边。

输入格式
输入包含T组测试数据,T不超过100。
每组测试数据输入一行包含一个正整数N,N不超过10^9。

输出格式
对于每组测试数据,输出一行表示答案。

输入样例
2
7
15

输出样例
3
4

问题分析
迭代计算来实现,暂时不解释。

AC的C语言程序如下:

/* LQ0086 最少砝码 */

#include <stdio.h>

int main()

    int t, n;
    scanf("%d", &t);
    while (t--) 
        scanf("%d", &n);

        int cnt = 1, sum = 1, y3 = 1;
        while (sum < n)
            y3 *= 3, sum += y3, cnt++;

        printf("%d\\n", cnt);
    

    return 0;

以上是关于最少砝码/砝码天平类规律的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1837 砝码称重数学,规律

POJ2142 The Balance 数论(扩展欧几里得算法)

天平 数学+DP

洛谷 2405 non天平

洛谷P2405 non天平

[POI2007]四进制的天平Wag