crypt1<uscao>1.3

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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值