Prime Cryptarithm

最简单的USACO,没有之一:【USACO题库】1.3.4 Prime Cryptarithm牛式 欢迎收看: 保障电脑安全 拒绝编译错误 DEV-C++题解 今天来看一个炒鸡简单的USACO,没有之一。 题目描述 下面是一个乘法竖式,如果用我们给定的那几个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。 数字只能取代*,当然第一位不能为0。写一个程序找出所有的牛式。 输入 Line 1:数字的个数。 Line 2:N个用空格分开的数字(每个数字都∈{1,2,3,4,5,6,7,8,9}) 。 输出 共一行,一个数字。表示牛式的总数。 样例输入 5 2 3 4 6 8 样例输出 1 小提示: 阅读详情

Prime Cryptarithm

Description

(这个命名不好的任务与质数无关,甚至实际上与质数无关。非常抱歉。)
Cryptarithm通常表示为一个纸笔的任务,其中解算器需要在算术术语或表达式的手动评估中用每个星号(或通常是字母)替换数字,以便用一致的应用数字的结果导出正确的表达。 一个典型的例子是这个cryptarithm,以其独特的解决方案显示:

    SEND            9567       S->9  E->5  N->6  D->7
  + MORE          + 1085       M->1  O->0  R->8
  -------        -------
   MONEY           10652       Y->2

以下是cryptarithm乘法问题,可以通过将指定的N个数字组中的数字替换为标有*的位置来解决。由于星号是通用的,因此输入的任何数字都可用于任何星号; 任何数字可以根据需要重复多次。
用密码集{2,3,5,7}考虑下面的cryptarithm:

      * * *
   x    * *
    -------
      * * *         <-- 部分乘积数1 -- 必须是三位数长
    * * *           <-- 部分乘积数2 -- 必须是三位数长
    -------
    * * * *

数字只能出现在标有“*”的地方。当然,不允许使用开头为0的非0数字。
部分乘积数必须是三位数长,即使一般情况可能有四位数的部分乘积数。
注意一下在美国的学校中教的“部分乘积”,第一部分乘积是第二个数的个位和第一个数的积,第二部分乘积是第二个数的十位和第一个数的乘积.

[Note that this diagram shows far more digits in its results than
the required diagram above which has three digit partial products!]

          a b c     <-- number 'abc'
        x   d e     <-- number 'de'; the 'x' means 'multiply'
     -----------
p1      * * * *     <-- product of e * abc; first star might be 0 (absent)
p2    * * * *       <-- product of d * abc; first star might be 0 (absent)
     -----------
      * * * * *     <-- sum of p1 and p2 (e*abc + 10*d*abc) == de*abc

PROGRAM NAME: crypt1

INPUT FORMAT

第一行:N,将被用到的数字的个数
第二行:N个空格分隔的用于解决cryptarithm问题的非零数字(每个数字都属于{1,2,3,4,5,6,7,8,9})

SAMPLE INPUT (file crypt1.in)

5
2 3 4 6 8

OUTPUT FORMAT

一行,一个数,表示满足该式子的总数。对于该实例这里有一种且仅有一种方案满足要求:

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

SAMPLE OUTPUT (file crypt1.out)

1

OUTPUT DETAILS

这里解释为什么222x22是可以的:3位数乘2位数产生两个(相等!)部分乘积数,每个部分乘积数都是三个数字(根据需要)。答案有四位数字,使用的数字集合{2,4,8}中的每个数字都在提供的集合{2,3,4,6,8}中。
为什么222x23不行:

      2 2 2   <-- OK:  three digits, all members of {2, 3, 4, 6, 8}
        2 3   <-- OK:  two digits, all members of {2, 3, 4, 6, 8}
     ------
      6 6 6   <-- OK:  three digits, all members of {2, 3, 4, 6, 8}
    4 4 4     <-- OK:  three digits, all members of {2, 3, 4, 6, 8}
  ---------
    5 1 0 6   <-- NOT OK: four digits (good), but 5, 1, and 0 are not in
                                                    {2, 3, 4, 6, 8}

设计算法

这道题我起初遗漏了当然其实是英文没看懂,用例子运行程序得到4,把数字输出看之后发现另外三组328×88、423×82、436×88确实是满足其中大部分条件的,后面看到牛式觉得可能是位数有问题,原来不仅是数字要满足条件,位数也是要满足条件的,所以也把上面那句加粗了,引起一下注意。接下来说一下算法设计:
这道题其实挺简单的,读懂要求按照它的来就行了,一个三位数乘一个二位数,两个部分乘积数必须是三位数,那么结果也必须只能是四位数,基本条件就是这些了。那么就只用解决查找每个数是否在所提供的数集中,用求余的方法就行了,没什么难度。

C++编写

/*
ID: your_id_here
TASK: crypt1
LANG: C++                 
*/
#include<iostream>
using namespace std;

int N;
int digits[9];

bool check(int number,int size)
{
    int temp=0;
    while(size--)
    {
        bool flag=false;
        temp=number%10;
        number/=10;
        for(int i=0;i<N;++i)
        {
            if(temp==digits[i])
                flag=true;
        }
        if(!flag)
            return false;
    }
    return true;
}

void solve()
{
    int num,num2,rec=0;
    int pro1,pro2,pro3;
    for(int i=0;i<N;++i)
        for(int j=0;j<N;++j)
            for(int k=0;k<N;++k)
                for(int m=0;m<N;++m)
                    for(int n=0;n<N;++n)
                    {
                        num=digits[i]*100+digits[j]*10+digits[k];
                        num2=digits[m]*10+digits[n];
                        pro1=num*digits[n];
                        if(check(pro1,3) && pro1<1000)      //第一个部分乘积数不符合条件就直接考虑下一种情况
                        {
                            pro2=num*digits[m];
                            if(check(pro2,3) && pro2<1000)        //第二个部分乘积数不符合条件考虑下一种情况
                            {
                                pro3=pro2*10+pro1;
                                if(check(pro3,4) && pro3<10000)        //最终结果不符合条件考虑下一种情况
                                    ++rec;
                            }
                        }
                    }
    cout<<rec<<endl;
}

int main()
{
    freopen("crypt1.in","r",stdin);
    freopen("crypt1.out","w",stdout);
    cin>>N;
    for(int i=0;i<N;++i)
        cin>>digits[i];
    solve();
    return 0;
}
从零开始:用7353张VOC/YOLO格式混凝土缺陷数据集训练你的第一个检测模型 本文详细介绍了如何使用7353张VOC/YOLO格式的混凝土缺陷数据集训练首个目标检测模型。从环境配置、数据解析到YOLOv5模型训练与优化,提供了完整的实战指南,特别针对数据不平衡问题给出了解决方案,助力开发者快速掌握混凝土缺陷识别技术。 阅读详情

相关推荐

Arduino——GY39大气压、温湿度、光照模块

前几天买东西的时候买了一个GY39,这个模块集成了温湿度,大气压,海拔,光照一体,使用起来很方面。它有两种工作模式使用串口模式时需要搭配转接板,我选择了IIC模式,看一下通信协议吧,就是关于高八位和低八位的数据。看一下接线。

戚晨夕的博客 2605

USACO Prime Cryptarithm 题解

此题很水,暴力搜索,然后根据条件判断,continue掉一些循环就可以了,简称,剪枝,一次过! 下面上代码: /* ID: bbsunch2 PROG: crypt1 LANG: C++ */ #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;stdlib.h&gt; #include &lt;ve...

计算机随笔 232

rk3576之imx415 4k@60fps

1;0;1;0;1;0;1;0;1;0;1;0;1;0;

darennet的专栏 705

LOL What?

MATH AND LOGIC LOL What? Cryptograms are puzzles where capital letters stand in for the digits of a number. If the same letter is used twice, it’s the same digit in both places, and if different lette...

VaQX1018的博客 441

opencv去除印章痕迹

今天看到一个很有意思的程序,就是去除票据上的红色印章,觉得很有意思,就把它抄过来记录一下,同时自己也开了一下脑洞。 原来的程序来自:https://www.cnblogs.com/skyfsm/p/7638301.html 可以看到图像效果很不错,下面是源码实现: #include &lt;iostream&gt; #include &lt;opencv2/imgproc/imgpro...

zeng_haoyu的博客 7957

电力远动入门:手把手解析IEC 60870-5-101规约的帧结构与报文交互(基于DL/T634.5101-2002)

本文深入解析IEC 60870-5-101规约的帧结构与报文交互,适用于电力远动通信系统。通过详细讲解规约的基础架构、控制域位定义及典型报文交互流程,帮助工程师快速掌握101规约的核心技术,提升电力自动化系统的调试与维护能力。

weixin_27076351的博客 245

Prime Cryptarithm(枚举)

Prime Cryptarithm The following cryptarithm is a multiplication problem that can be solved by substituting digits from a specified set of N digits into the positions marked with *. If the set of pri...

Simone chou... 193

Halcon一维测量实战:从measure_pos与measure_pairs的底层原理到精准应用

本文深入解析Halcon中measure_pos与measure_pairs算子的底层原理与精准应用,涵盖参数调优、测量矩形方向设置及典型工业场景实战。通过对比分析,揭示两者在一维测量中的核心差异与适用场景,提供从基础到高级的完整解决方案,助力工业视觉检测精度提升。

weixin_42525551的博客 424

L5: Design, Properties, Examples, and Applications of Constraint Satisfaction Problems (CSP)

在CSP的深度优先搜索(DFS)中,​。

m0_74331272的博客 1309

【实用运维脚本】Windows 批量 TCP 端口检测(tcping 一键巡检)

摘要:本文介绍一款高效的Windows批量TCP端口检测脚本,适配tcpingv0.39工具,实现多服务器一键巡检。脚本具有进度可视化、双日志输出、自动容错等优势,支持注释行过滤和UTF-8编码。 使用仅需三步: 1)下载tcping工具 2)编辑目标列表 3)运行脚本即可自动检测并生成带编号的检测报告。 该方案解决了手动检测效率低、易遗漏的问题,特别适合日常运维中的端口连通性检查,实测稳定可靠,开箱即用。

蕲士|D365 & 服务器运维,心有东坡,行稳致远。 799

.Net如何使用Web API实现数据交互?

数据模型代表了要交互的数据结构。例如,假设我们要创建一个简单的图书管理系统,我们可以定义一个Book类作为数据模型。set;set;set;

Code365 258

P1211 [USACO1.3] 牛式 Prime Cryptarithm

下面是一个乘法竖式,如果用我们给定的那n个数字来取代,可以使式子成立的话,我们就叫这个式子为牛式。数字只能取代,当然第一位不能为0,况且给定的数字里不包括0。注意一下在美国的学校中教的“部分乘积”,第一部分乘积是第二个数的个位和第一个数的积,第二部分乘积是第二个数的十位和第一个数的乘积。请计算出牛式的数量。

zty20120913的博客 683

Debezium系列之:深入理解 Debezium Topic的设置要求

Debezium系列之:配置 Debezium Topic

zhengzaifeidelushang的博客 1009

USACO牛式 Prime Cryptarithm

USACO牛式 Prime Cryptarithm 题目描述 下面是一个乘法竖式,如果用我们给定的那 n 个数字来取代 *,可以使式子成立的话,我们就叫这个式子为牛式。 *** x ** *** *** **** 数字只能取代 *,当然第一位不能为 0,况且给定的数字里不包括 0。 注意一下在美国的学校中教的“部分乘积”,第一部分...

w13141194211的博客 520

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

USACO Prime Cryptarithm Accepted

传说这道题容易超时,结果一遍就过了,意外^_^。USACO Training Grader Results for DaN marner [danmarn1]TASK: crypt1LANG: CCompiling...Compile: OKExecuting... Test 1: TEST OK [0.004 secs] Test

Dark White Polyphony 深白复调 1625

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

USACO1.3.4 Prime Cryptarithm(牛式)

The following cryptarithm is a multiplication problem that can be solved by substituting digits from a specified set of N digits into the positions marked with *. If the set of prime digits {2,3,5,7}

九天神龍 1672

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

USACO Prime Cryptarithm

//这题是一简单的一个递归 算锻炼水体熟练度吧~~~ Prime Cryptarithm The following cryptarithm is a multiplication problem that can be solved by substituting digits from a specified set of N digits into the positi...

weixin_34055910的博客 84

USACO-Section 1.3 Prime Cryptarithm(枚举)

题目给n个数字,要求找出所有符合要求的 3位数(abc)乘以2位数(de) 的组合 ①abc和de由规定数字组成 ②abc*d与abc*e的结果是三位数且由规定数字组成 ③abc*de的结果是四位数且由规定数字组成 由于最多只有9个数字,所以枚举每个数字即可

idealism_xxm的专栏 741

USACO1.3.4 Prime Cryptarithm 牛式 解题报告(模拟)

Description   下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。 * * * x * * ------- * * * * * * ------- * * * * 数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0。 注意一下在美国的学校中教的“部...

bestsort 796

1.3.3 Prime Cryptarithm

The following cryptarithm is a multiplication problem that can be solved by substituting digits from a specified set of N digits into the positions marked with *. If the set of prime digits {2,3,5,7} ...

weixin_30951389的博客 70

USACO 1.3 - Prime Cryptarithm(暴力枚举)

The following cryptarithm is a multiplication problem that can besolved by substituting digits from a specified set of N digits into thepositions marked with *. If the set of prime digits {2,3,5,7} is

Halo 752

牛式 Prime Cryptarithm

P1211 [USACO1.3]牛式 Prime Cryptarithm 分析:大暴力,还说啥呢...标记输入的数字,一个个算出来,判断是否有标记到 #include&lt;bits/stdc++.h&gt; using namespace std; int n,cnt; bool flag[10]; bool check(int x) { while(x) { ...

菱形继承 4176
上一篇: Barn Repair
下一篇: 在Github中创建和删除文件夹或者文件
Slatter
博客等级 码龄1天 105粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值