当前位置: 首页 > article >正文

|-牛式-|

题目描述

下面是一个乘法竖式,如果用我们给定的那几个数字来取代 * ,可以使式子成立的话,我们就叫这个式子牛式。

  * * * 
x   * * 
------- 
  * * * 
* * * 
------- 
* * * * 

数字只能取代 * ,当然第一位不能为 0 。

写一个程序找出所有的牛式。

输入格式

第一行一个整数 N ,代表数字的个数。

第二行 : N 个用空格分开的数字 ( 每个数字都 ∈ { 1,2,3,4,5,6,7,8,9 } )。

输出格式

一个数字。表示牛式的总数。

样例

输入数据 1

5
2 3 4 6 8

输出数据 1

1

样例解释

下面是样例的那个牛式:

      2 2 2
    x   2 2
     ------
      4 4 4
    4 4 4
  ---------
    4 8 8 4

这题看似很复杂,实则一点也不简单难,只需枚举竖式上面的五个数(第一第二行),再进行判断即可。直接枚举,最多需要9^5次,肯定不会超时。

AC代码

#include<bits/stdc++.h>
using namespace std;
bool flag[10];
int sum;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;++i)
    {
        int x;
        cin>>x;
        flag[x]=true;
    }
    for(register int i=1;i<=9;++i)
    {
        if(flag[i])
        {
            for(register int j=1;j<=9;++j)
            {
                if(flag[j])
                {
                    for(register int k=1;k<=9;k++)
                    {
                        if(flag[k])
                        {
                            for(register int m=1;m<=9;m++)
                            {
                                if(flag[m])
                                {
                                    for(register int n=1;n<=9;n++)
                                    {
                                        if(flag[n])
                                        {
                                            bool p=true;
                                            int s1=i*100+j*10+k,s2=m*10+n;
                                            int temp=s1*m;//判断第三行数字 
                                            while(temp>0)
                                            {
                                                if(temp>999)
                                                {
                                                    p=false;
                                                    break;
                                                }
                                                int x=temp%10;
                                                if(!flag[x])
                                                {
                                                    p=false;
                                                    break;
                                                }
                                                temp/=10;
                                            }
                                            if(!p)continue;
                                            temp=s1*n;//判断第四行数字 
                                            while(temp>0)
                                            {
                                                if(temp>999)
                                                {
                                                    p=false;
                                                    break;
                                                }
                                                int x=temp%10;
                                                if(!flag[x])
                                                {
                                                    p=false;
                                                    break;
                                                }
                                                temp/=10;
                                            }
                                            if(!p)continue;
                                            temp=s1*s2;//判断最后一行数字 
                                            while(temp>0)
                                            {
                                                if(temp>9999)
                                                {
                                                    p=false;
                                                    break;
                                                }
                                                int x=temp%10;
                                                if(!flag[x])
                                                {
                                                    p=false;
                                                    break;
                                                }
                                                temp/=10;
                                            }
                                            if(!p)continue;
                                            sum++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    printf("%d",sum);
    return 0;
}

好啦,今天就讲到这里,拜拜!


http://www.kler.cn/a/450387.html

相关文章:

  • 【幼儿园识物】比大小启蒙资料PDF
  • 谷歌浏览器的网络连接问题解决方案
  • C++设计模式:享元模式 (附文字处理系统中的字符对象案例)
  • 【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit
  • 109.【C语言】数据结构之求二叉树的高度
  • Pytorch | 从零构建EfficientNet对CIFAR10进行分类
  • WebRTC学习二:WebRTC音视频数据采集
  • ChatGPT与Postman协作完成接口测试(二)
  • 1 SpringBoot——项目搭建
  • Web 第一次作业 初探html 使用VSCode工具开发
  • 后端-redis
  • Git远程仓库的使用
  • 【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
  • 探索数据可视化的利器:Matplotlib
  • 【云原生】kubeadm搭建的kubernetes1.28集群上自建ingress-nginx服务
  • 【Qt】了解和HelloWorld
  • 【每日学点鸿蒙知识】AVCodec、SmartPerf工具、web组件加载、监听键盘的显示隐藏、Asset Store Kit
  • Spring Web MVC:功能端点(Functional Endpoints)
  • Java AOP 介绍与实践
  • amazon广告授权
  • Django 模型管理器中自定义方法和添加导出功能
  • 聊聊volatile的实现原理?
  • conda 环境报错error while loading shared libraries: libpython3.9.so.1.0
  • 日志和MVCC的详解
  • JavaScript查缺补漏
  • Windows、CentOS环境下搭建自己的版本管理资料库:GitBlit