the reason of failure:1、没认真审题,题目规定的方方面面都应该注意到,比如题目要求2个相乘的数为3位,结果也是3位,最后相加才是4位.
thinking:所以数枚举一遍,看是否符合.
题意:
★Prime Cryptarithm 牛式
下面是一个乘法竖式,如果用我们给定的那几个数字来取代*,可以使式子成立的话,我们就叫这
个式子牛式.
* * *
x * *
-------
* * *
* * *
-------
* * * *
数字只能取代*,当然第一位不能为 0.
写一个程序找出所有的牛式.
PROGRAM NAME: crypt1
14
INPUT FORMAT
Line 1: 数字的个数.
Line 2: N 个用空格分开的数字(每个数字都∈{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
代码:
/*
PROG: crypt1
LANG: C++
ID: me
*/
#include <bits/stdc++.h>
using namespace std;
int main(){
freopen("crypt1.in","r",stdin);
freopen("crypt1.out","w",stdout);
int n,m,o;
cin >> n ;
int i,j,k,l,i1,j1,k1,i2;
int sum1,sum2,sum3;
int a[n];
int t1[5],t2[5],t3[5];
int g1=0;
for(i=0;i<n;i++)
cin >> a[i];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
for(k=0;k<n;k++)
for(i1=0;i1<n;i1++)
for(j1=0;j1<n;j1++){
sum1=a[i1]*(a[i]*100+a[j]*10+a[k]);
sum2=a[j1]*(a[i]*100+a[j]*10+a[k]);
//cout << "sum1=" << sum1 << "sum2=" << sum2<< endl;
memset(t1,0,sizeof(t1));
memset(t2,0,sizeof(t2));
if(100<=sum1&&sum1<1000&&100<=sum2&&sum2<1000)
for(i2=0;i2<3;i2++)
for(k1=0;k1<n;k1++){
int b=sum1/(pow(10,i2));
int c=sum2/(pow(10,i2));
//cout << "值" << a[k1] << "sum1="<< b%10
//<< "sum2=" << c%10<< endl;
if(a[k1]==b%10)t1[i2]=1;
if(a[k1]==c%10)t2[i2]=1;}
// cout << t1[0] << t1[1] << t1[2]
//<< t2[0] << t2[1] << t2[2] << "GG" <<endl;
if(t1[0]&&t1[1]&&t1[2]&&t2[0]&&t2[1]&&t2[2]){
//cout << sum1 <<"||" << sum2 << endl;
memset(t3,0,sizeof(t3));
sum3=sum1*10+sum2;
for(i2=0;i2<4;i2++)
for(k1=0;k1<n;k1++){
int d=sum3/(pow(10,i2));
if(a[k1]==d%10)t3[i2]=1;}
// cout << t3[0] << t3[1] << t3[2] << t3[3] <<"t3"<< endl;
if(t3[0]&&t3[1]&&t3[2]&&t3[3]&&sum3<=9999){
//cout << a[i] << a[j] << a[k]<<endl;
//cout << " " << a[i1] << a[j1] << endl;
//cout <<sum1 << endl;
//cout << " "<< sum2 << endl;
//cout << sum3 << endl;
//cout << endl;
g1++;}
}
}
cout << g1 << endl;
return 0;
}