首页 > 其他分享 >洛谷题单指南-暴力枚举-P1149 [NOIP2008 提高组] 火柴棒等式

洛谷题单指南-暴力枚举-P1149 [NOIP2008 提高组] 火柴棒等式

时间:2024-02-01 18:12:59浏览次数:33  
标签:cnt 数字 int 洛谷题 NOIP2008 枚举 火柴 P1149

原题链接:https://www.luogu.com.cn/problem/P1149

题意解读:计算符合A+B=C时,火柴棍数量正好等于n,可以采用枚举A、B,然后计算出C,根据A、B、C计算出所有火柴棍数量,再加上4根加号、等号的,如果与n相等,即为一种合法等式。

解题思路:

题目的关键在于枚举A、B时,最大值的设定,不能超时。

分析思路如下:

由于n最大是24,除开加号、等号,可用于拼数字的火柴棍有20根,且要分配到A、B、C三个数;

一个基本常识:用的火柴棍越少,可拼的数字就越长,也就越大;

再看每个数字所用的火柴棍数,1只需要2根,是最少的,假设B数用最少的火柴棍即2根,那么A、C分剩余18根;

根据A+B=C,那么C的数字长度要么等于A的数字长度,要么比A的数字长度多1;

18根火柴棍可以组成9个1,因此A最大为1111,不能再大了。

同样的分析,B最大也为1111,O(n2)不会超时。

100分代码:

#include <bits/stdc++.h>
using namespace std;

int h[10] = {6, 2, 5, 5, 4 ,5, 6, 3, 7, 6}; //每个数字对应的火柴棍数
int n, ans;

//数字x由多少根火柴棍组成
int count(int x)
{
    if(x == 0) return h[0];

    int cnt = 0;
    while(x)
    {
        cnt += h[x % 10];
        x /= 10;
    }
    return cnt;
}

int main()
{
    cin >> n;

    for(int a = 0; a <= 1111; a++)
    {
        for(int b = 0; b <= 1111; b++)
        {
            int c = a + b;
            int all = count(a) + count(b) + count(c) + 4;
            if(all == n) ans++;
        }
    }

    cout << ans;
}

 

标签:cnt,数字,int,洛谷题,NOIP2008,枚举,火柴,P1149
From: https://www.cnblogs.com/jcwy/p/18001802

相关文章

  • 洛谷题单指南-暴力枚举-P1217 [USACO1.5] 回文质数 Prime Palindromes
    原题链接:https://www.luogu.com.cn/problem/P1217题意解读:本题要找[a,b]范围内的所有回文质数,千万不要被题目提示所干扰,如果按照提示先产生各个长度的回文数,再依次判断是否是素数,程序写起来比较繁琐,需要根据a、b的长度,写8个判断是否产生1~8位回文数,最后做素数判断。换一个思路......
  • 洛谷题单指南-暴力枚举-P3654 First Step (ファーストステップ)
    原题链接:https://www.luogu.com.cn/problem/P3654题意解读:在r*c矩阵中,找连续k个.的总数。解题思路:本题直接枚举即可,在每一行中,以每一列为起点,连续判断k个元素,如果全为'.',则方案数加1在每一列中,以每一行为起点,连续判断k个元素,如果全为'.',则方案数加1注意:如果k=1,只有一个人......
  • 洛谷题单指南-暴力枚举-P3392 涂国旗
    原题链接:https://www.luogu.com.cn/problem/P3392题意解读:此题枚举白、蓝、红所有可能的行数组合,依次逐行判断每个方格,是否需要染色,计算最少的染色次数即可。解题思路:总行数是n,先考虑白色,第一行必是白色,最后一行必是红色,至少有一行蓝色,因此白色行数的范围是1~n-2再考虑蓝......
  • 洛谷题单指南-暴力枚举-P1088 [NOIP2004 普及组] 火星人
    原题链接:https://www.luogu.com.cn/problem/P1088题意解读:火星人的手指可以通过全排列来表示数字,全排列由小到大的顺序即为表示的数字大小,题目可以转化为:给定按顺序全排列中的某一个排列,求往后数m个排列的内容。解题思路:此题与经典全排列问题的差异在于,需要从指定一个排列开......
  • 洛谷题单指南-暴力枚举-P1706 全排列问题
    原题链接:https://www.luogu.com.cn/problem/P1706题意解读:n个数全排列问题,本质上,给定n个空位,枚举每个能填入空位的数,依次填入,每个数只能填一次。解题思路:如何填入n个数呢,可以借助于递归,流程如下:dfs(填入第k个数){如果已经填满n个数输出结果返回......
  • 洛谷题单指南-暴力枚举-P1157 组合的输出
    原题链接:https://www.luogu.com.cn/problem/P1157题意解读:在1~n的数中挑选r个,有多少种组合,与P1036类似,有两种做法:二进制法、DFS,下面给出DFS版的代码。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=25;intn,r;intt[N];voiddfs(intk){......
  • 洛谷题单指南-暴力枚举-P1036 [NOIP2002 普及组] 选数
    原题链接:https://www.luogu.com.cn/problem/P1036题意解读:题目即要在n个数中,枚举出所有的子集,当子集中数字个数刚好为k时,求和,判断是否是素数。解题思路:方法一:二进制法通过二进制法,可以枚举一个集合中所有元素“选”或者“不选”的情况,用二进制1表示选该元素,二进制0表示不选。......
  • 洛谷题单指南-暴力枚举-P1618 三连击(升级版)
    原题链接:https://www.luogu.com.cn/problem/P1618题意解读:枚举所有三位数的组合情况,判断是否符合比例。解题思路:方法一:枚举第一个数根据题意,目的是寻找三个符合比例的三位数,可以直接枚举第一个,最小是123,最大是987设第一个数为x,三个数的比例关系是a:b:c设另外两个数为y,z那么,根......
  • 洛谷题单指南-暴力枚举-P2241 统计方形(数据加强版)
    原题链接:https://www.luogu.com.cn/problem/P2241题意解读:要在整个n*m区域计算正方形和长方形的个数,枚举法即可。解题思路:此题枚举的对象是矩形的高i和宽j,高的范围[1,n],宽的范围[1,m],然后计算在n*m区域内有多少个i*j,i==j即属于正方形,i!=j属于长方形。那么,问题就集中在了......
  • 洛谷题单指南-排序-P1012 [NOIP1998 提高组] 拼数
    原题链接:https://www.luogu.com.cn/problem/P1012题意解读:通过某种合理的排序方式,使得排序后的数字连在一起最大。解题思路:此题关键在于排序,对于两个数字,哪个数字应该排在前面呢?1、思考误区很容易想到,给定两个数abcd、xyz,先比较第一位a和x,谁大谁排前面,一直到c和z。再来看d,这......