zoukankan      html  css  js  c++  java
  • Prime Cryptarithm 牛式

    Description

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

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

    数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0。

    注意一下在美国的学校中教的“部分乘积”,第一部分乘积是第二个数的个位和第一个数的积,第二部分乘积是第二个数的十位和第一个数的乘积.

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

    Input

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

    Output

     共一行,一个数字。表示牛式的总数。
     下面是样例的那个牛式。
    
        
    
            2 2 2
          x   2 2
        ---------
            4 4 4
          4 4 4
        ---------
         4 8 8 4

    Sample Input

    5
    2 3 4 6 8

    Sample Output

    1
    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <cstdlib>
    #include <deque>
    #include <map>
    using namespace std;
    typedef long long ll;
    map <ll,ll> mp;
    int main()
    {
        ll i,j,k,p,q,a,b,c,d,e,n,A,B,C,ans=0;
        ll aa[1010];
        cin>>n;
        for(i=0;i<n;i++)
        {
            cin>>aa[i];
            mp[aa[i]]=1;
        }
        for(i=0;i<n;i++)
        {
            a=aa[i];
            for(j=0;j<n;j++)
            {
                b=aa[j];
                for(k=0;k<n;k++)
                {
                    c=aa[k];
                    A=a*100+b*10+c;
                    for(p=0;p<n;p++)
                    {
                        d=aa[p];
                        for(q=0;q<n;q++)
                        {
                            e=aa[q];
                            B=d*10+e;
                            C=A*B;
                            if(A*e>=100&&A*e<=999)
                            {
                                if(A*d>=100&&A*d<=999)
                                {
                                     if(A*B>=1000&&A*B<=9999)
                                     {
                                         if(mp[A*e%10]&&mp[A*e/10%10]&&mp[A*e/100])
                                         {
                                             if(mp[A*d%10]&&mp[A*d/10%10]&&mp[A*d/100])
                                             {
                                                 if(mp[A*B%10]&&mp[A*B/10%10]&&mp[A*B/100%10]&&mp[A*B/1000])
                                                    ans++;
                                             }
                                         }
                                     }
                                }
    
                            }
                        }
                    }
                }
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    
  • 相关阅读:
    android讲义2之自定义view
    android讲义2之单项选择
    android讲义2之计时器组件Chronometer
    android讲义2之代码布局
    android讲义2之图片变换
    android讲义2之简单图片浏览器且有截图效果(对ImageView使用)
    android讲义2的相对布局(持续更新)
    android讲义2之在xml中设定imageButtion
    MoSH——移动设备上的Shell
    ArithmeticOperators.cs
  • 原文地址:https://www.cnblogs.com/zcy19990813/p/9702692.html
Copyright © 2011-2022 走看看