zoukankan      html  css  js  c++  java
  • 简单模拟(暴力)——火柴棒等式

    ·今天是2019年8月7日啊,祝各位大佬七夕快乐~~~

    ·这题这种解法完全就是暴力嘛。。。好像还有搜索解法(以后再更)。

    ·洛谷入口:P1149

    ·题目背景:2008年NOIP提高组真题

    ·题目内容:

    给你n根火柴棍,你可以拼出多少个形如“A+B=CA+B=C”的等式?等式中的AA、BB、CC是用火柴棍拼出的整数(若该数非零,则最高位不能是00)。用火柴棍拼数字0-909的拼法如图所示:

    ·题目注意事项:

    1.加号与等号各自需要两根火柴棍

    2.如果A≠BAB,则A+B=CA+B=C与B+A=CB+A=C视为不同的等式(A,B,C>=0A,B,C>=0)

    3.n根火柴棍必须全部用上

    ·思想:

    枚举过样例,暴力出奇迹!

    ·疑难点:

    暴力查找的上限是多少?

    根据各个大佬(的题解)分析可得:上限为1111;

    其中有一个涩会的大佬是那么说的:

    "由于1111+1=1112已经用了25根小棒,已经超过了题目24根小棒的数据范围,所以可以直接枚举相加的两个数,上界为1111,再用拆数的方法求出这组要用的火柴棒根数,再计算次数就可以了。”

    ·代码:

    #include<iostream>
    using namespace std;
    int n,ans=0;
    int a[10]={6,2,5,5,4,5,6,3,7,6};//存储0-9各需的火柴棒个数
    int match(int x)
    {
    	if(x==0) return 6;//因为0不能跳入while循环,所以特判
    	int tot=0;
    	while(x>=1)
    	{
    		tot+=a[x-(x/10)*10];//算出每位数所需的火柴棒个数
    		x=x/10;
    		}
    		return tot;//此数所用的火柴棒个数
    }
    int main()
    {
    	cin>>n;
    	int t=n-4;
    	for(int i=0;i<=1111;i++)
    	for(int j=0;j<=1111;j++)
    	if(match(i)+match(j)+match(i+j)==t) ans++;//这个暴力就好了
    	cout<<ans<<endl;
    	return 0;
    }
    

      

  • 相关阅读:
    nginx安装配置: configure命令
    nginx最简安装
    进程上下文切换
    九卷读书:《操作系统设计与实现》读书笔记
    计算机存储器的层次结构
    线程,进程和并发
    理解Flight框架核心
    Ubuntu16.04安装QQ机器人
    微信支付解决方案
    springboot +nginx +freemarker 模板的简单集成
  • 原文地址:https://www.cnblogs.com/konglingyi/p/11317336.html
Copyright © 2011-2022 走看看