2500 - 牛式

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

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

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

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

<span>写一个程序找出所有的牛式。</span>

题目输入

输入包含多组测试数据

Line 1:

数字的个数。

Line 2:

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

题目输出

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

输入/输出样例

输入格式

5
2 3 4 6 8

输出格式

1

C语言解答

#include<stdio.h>
void main()
{
	int i,x,x1,x2,x3,i1,j1,j,k,n,t,t1,c,a[11];
	while(scanf("%d",&n)!=EOF){
	t1=0;
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			for(k=0;k<n;k++)
			{
				t=a[i]*100+a[j]*10+a[k];
				for(i1=0;i1<n;i1++)
					for(j1=0;j1<n;j1++)
					{
						c=0;
						x1=t*a[i1];
						x2=t*a[j1];
						x3=x1*10+x2;
						if(x1<100||x2<100||x3<1000||x1>=1000||x2>=1000||x3>=10000)continue;
						for(x=0;x<n;x++)
							if(x1/100==a[x]){c++;break;}
						if(c!=1)continue;
						for(x=0;x<n;x++)
							if(x1%10==a[x]){c++;break;}
						if(c!=2)continue;
						for(x=0;x<n;x++)
							if((x1/10%10)==a[x]){c++;break;}
						if(c!=3)continue;
						for(x=0;x<n;x++)
							if(x2/100==a[x]){c++;break;}
						if(c!=4)continue;
						for(x=0;x<n;x++)
							if(x2%10==a[x]){c++;break;}
						if(c!=5)continue;
						for(x=0;x<n;x++)
							if((x2/10%10)==a[x]){c++;break;}
						if(c!=6)continue;
						for(x=0;x<n;x++)
							if(x3/1000==a[x]){c++;break;}
						if(c!=7)continue;
						for(x=0;x<n;x++)
							if(x3%10==a[x]){c++;break;}
						if(c!=8)continue;
						for(x=0;x<n;x++)
							if((x3/10%10)==a[x]){c++;break;}
						if(c!=9)continue;
						for(x=0;x<n;x++)
							if((x3/100%10)==a[x]){c++;break;}
						if(c!=10)continue;
						t1++;
					}
			}
	printf("%d\n",t1);
	}
}

C++解答

#include <bits/stdc++.h>
using namespace std;
#define maxn 12
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF){
        int a[10]={0};
        int b[maxn];
        for (int i=0;i<n;i++){
            scanf("%d",&b[i]);
            a[b[i]]=1;
        }
        int ans=0;
        for (int i1=0;i1<n;i1++){
            for (int i2=0;i2<n;i2++){
                for (int i3=0;i3<n;i3++){
                    for (int s1=0;s1<n;s1++){
                        for (int s2=0;s2<n;s2++){
                            int aaa=b[i1]*100+b[i2]*10+b[i3];
                            int ass=aaa*b[s2]; if (ass>=1000) continue;
                            if (a[ass/100]&&a[ass%10]&&a[(ass/10)%10]){
                                int add=aaa*b[s1]; if (add>=1000) continue;
                                if (a[add/100]&&a[add%10]&&a[(add/10)%10]){
                                    int sss=add*10+ass;
                                    if (sss>=10000) continue;
                                    if (a[sss/1000]&&a[sss%10]&&a[(sss/10)%10]&&a[(sss/100)%10]){
                                        ans++;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}